オラクル環境でNVL関数を使っているのですが、
SELECT NVL(項目名,1) FROM テーブル名
という抽出をvarchar型の3桁の項目に行った場合、
NULLの場合は1がセットされると思うのですが、3桁の項目なので[001]とセットされるのでしょうか?
それとも「△△1」(△=スペース)とセットされるのでしょうか?
また、number項目であった場合も3桁の項目に対し1桁の値がセットされる場合、
自動的に前2桁には[00]がセットされるのでしょうか?
上記のような、varchar型やnumber型にフル桁でない情報がセットされる場合、
どのような値として保持するか、ということが知りたいです。
できればITproなど公式的なリファレンスに載っているサイトなど(文献でもページを教えてくだされば可)を教えてください。
よろしくお願いいたします。
(基本)
CHAR型は固定長のため3桁としてあれば不足分を空白で埋めてくれるが、
VARCHAR型は可変長のため3桁としてあっても、中身が1桁なら1桁となる。
(例1)
項目名 が VARCHAR型で、中身が[1]であるとして、
受け側もVARCHAR型であるならば、勝手に[ 1]などとはならず[1]が入り、
受け側がCHAR型の場合は空白で補完され[ 1]が入る。
(例2)
項目名が NUMBER型、中身が[1]であるとして、
カラムには値が入っているだけであって、書式を保持する項目は無いため、
[001]などとしたいのであれば、TO_CHAR関数等で明示的に変換する必要がある。
(関係資料)Oracle Database SQL言語リファレンス
NVL
http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/f...
NVL2
http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/f...
Oracleの組込みデータ型
http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/s...
データ型の暗黙的変換
http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/s...
(余談)
フォーマットについては、ORACLE側ではなくフロントエンドのプログラムのほうで、
別途フォーマットするほうが良い場合もあるため、システム設計の段階で、
どちらで行うべきかを考慮して、SQLを組まないといけませんね。
コメント(0件)