【TRY! ORACLE MASTER】11g SQL基礎I 編
(第2回 単一行関数、変換関数および条件式)

みなさん、こんにちは。前回はどうでしたでしょうか。2回目の今回は多くの学習者がつまずきやすい関数についてです。
*前回同様、問題文のボックスの後に解説を掲載しています。スクロールしすぎて回答をみてしまうとシラケてしまいますので、ご注意ください! ^^


まずは、データ形式指定に関する問題です。

問題(3)

日付データ型の列に書式は 'DD-MON-YY'で、 '03-FEB-99'として値を挿入した場合、実際にデータベースに登録される年は西暦何年と解釈されますか。該当する選択肢を 1つ選択してください。

  1. 2099年
  2. 1999年
  3. 2999年
  4. 99年


回答と解説:

 正解は、1.です。

日付の値を挿入する際の書式が YY の場合、西暦年の下2桁として解釈され、省略した上2桁は現在の年と同じものと解釈されます。

たとえば、2010年現在、99と指定した場合、現実世界の一般的な解釈としては、1999年と考えられますがYY日付書式ではそうではないので注意が必要です。

YYYYとして、4桁の年数で省略せずに登録するのが無難ですが、2桁で省略して現在の年数に近い年(先の例では、2099年ではなく1999年)として認識させるための書式として、RR日付書式があります。



どうでしたか?日付データの変換他、文字列から数値への変換など他に多数関数がありますのでそれらについて使用用途と注意点を確認しましょう。次は、前回の例題でもありました重要トピックNULLを扱う関数についてです。


問題(4)

NULLに関する関数の説明で、誤っているものを選択肢から1つ選んでください。

  1. NVL(引数1, 引数2)関数      : 引数1がNULLの場合は、引数2に指定された値に変換して返します。
  2. NVL2(引数1, 引数2, 引数3)関数  : 引数1がNULLでない場合、引数2を返し、NULLの場合は、引数3を返します。
  3. NULLIF(引数1, 引数2)関数     : 2つの引数の値が等しい場合はNULLを返し、異なる場合は、引数2の値を返します。
  4. COALESCE (引数1, 引数2, ... 引数n)関数: リスト内のNULLでない最初の引数を戻します。


回答と解説:

 正解は、3.です。

NULLIF(引数1, 引数2)関数は、 2つの引数の値を比較して、それらが等しい場合はNULLを戻しますが、異なる場合は引数2の値ではなく引数1の値を戻します。NVL関数をはじめ、 NULLを取り扱う関数は多数あります。一度目を通しておくことをお勧めします。



いかがでしたでしょうか。不正解だったかたは各トピックを見直してください。次回は、「グループ関数」 と 「複数の表からのデータ取得」を確認します。お楽しみに!