0. 実験ユーザー「dicdic」でコネクトする。
SQL> conn dicdic/Oracle11g
接続されました。
SQL>
|
1. NULLは一覧表示をしたときに歯抜けのようになって表示されてしまう。
下は休学者(在籍区分コード='06')のTOEIC得点の状況の一覧をSelectしたもの。
SQL> Select 氏名,TOEIC FROM TT01_学生 Where 在籍区分コード = '06';
氏名 TOEIC
---------------------------------------- ----------
多田 長次郎
蛭田 花音 789
内山 菜々美 902
細井 尚志 797
大江 常吉 585
石崎 健吉 895
岸田 雅美 718
相馬 弘之 764
下川 里沙 777
樺山 正嗣 668
大槻 安子
井沢 比呂 804
神山 道雄 719
北田 怜子 601
寺崎 範明 820
久米 安雄 588
織田 敏彦 542
飛田 幸男
18行が選択されました。
SQL>
|
2. 【NVL関数】
NVL関数は、第1引数に指定した値がNULLかどうかを判別し、NULLだった場合にのみ、第2引数に用意した値を返す。
NULLの代替として0と表示させるようにすると、下のようになる。
SQL> Select 氏名,NVL(TOEIC,0) FROM TT01_学生 Where 在籍区分コード = '06';
氏名 NVL(TOEIC,0)
---------------------------------------- ------------
多田 長次郎 0
蛭田 花音 789
内山 菜々美 902
細井 尚志 797
大江 常吉 585
石崎 健吉 895
岸田 雅美 718
相馬 弘之 764
下川 里沙 777
樺山 正嗣 668
大槻 安子 0
井沢 比呂 804
神山 道雄 719
北田 怜子 601
寺崎 範明 820
久米 安雄 588
織田 敏彦 542
飛田 幸男 0
18行が選択されました。
SQL>
|
3. いやまてよ...。上のようだと、まるでTOEICを受験したにもかかわらず、0点だったように見えてしまう。
というわけで、0ではなくて「未受験」と表示させるようにしようとしたが、TOEIC列は数値(NUMBER型)なので、
「未受験」という日本語を並列で表示することができないため下のようになってしまう。
SQL> Select 氏名,NVL(TOEIC,'未受験') FROM TT01_学生 Where 在籍区分コード = '06';
Select 氏名,NVL(TOEIC,'未受験') FROM TT01_学生 Where 在籍区分コード = '06'
*
行1でエラーが発生しました。:
ORA-01722: 数値が無効です。
SQL>
|
4. ならば、TO_CHAR関数で文字型に変換してしまおう。
そしたらうまくいきました。 ※数字が左詰になってしまう点に注意。
SQL> Select 氏名,NVL(TO_CHAR(TOEIC),'未受験') FROM TT01_学生 Where 在籍区分コード = '06';
氏名 NVL(TO_CHAR(TOEIC),'未受験')
---------------------------------------- ----------------------------------------
多田 長次郎 未受験
蛭田 花音 789
内山 菜々美 902
細井 尚志 797
大江 常吉 585
石崎 健吉 895
岸田 雅美 718
相馬 弘之 764
下川 里沙 777
樺山 正嗣 668
大槻 安子 未受験
井沢 比呂 804
神山 道雄 719
北田 怜子 601
寺崎 範明 820
久米 安雄 588
織田 敏彦 542
飛田 幸男 未受験
18行が選択されました。
SQL>
|
5. 【NVL2関数】
ついでに言うと、NVL2関数なんていうのがある。NVL2関数は、第1引数の値がNULL以外なら第2引数を返し、NULLなら第3引数を返す。
SQL> Select 氏名,NVL2(TO_CHAR(TOEIC),'受験履歴あり','未受験') FROM TT01_学生 Where 在籍区分コード = '06';
氏名 NVL2(TO_CHAR
---------------------------------------- ------------
多田 長次郎 未受験
蛭田 花音 受験履歴あり
内山 菜々美 受験履歴あり
細井 尚志 受験履歴あり
大江 常吉 受験履歴あり
石崎 健吉 受験履歴あり
岸田 雅美 受験履歴あり
相馬 弘之 受験履歴あり
下川 里沙 受験履歴あり
樺山 正嗣 受験履歴あり
大槻 安子 未受験
井沢 比呂 受験履歴あり
神山 道雄 受験履歴あり
北田 怜子 受験履歴あり
寺崎 範明 受験履歴あり
久米 安雄 受験履歴あり
織田 敏彦 受験履歴あり
飛田 幸男 未受験
18行が選択されました。
SQL>
|
|