第5章  変換関数・汎用関数と条件式の指定

5.1 データ型の変換と変換関数

暗黙的なデータ型変換
・数値が求められている箇所に、文字値を指定した場合
文字値(CHAR型・VARCHAR2型)>>>数値(NUMBER型)に変換される。

・日付値が求められている箇所に、文字値を指定した場合
文字値(CHAR型・VARCHAR2型)>>>日付値(DATE型)に変換される。

・文字値が求めらている箇所に、数値を指定した場合。
数値(NUMBER型)>>>文字値(CHAR型・VARCHAR2型)に変換される

・文字値が求められている箇所に、日付値を指定した場合
日付値(DATE型)>>>文字値(CHAR型・VARCHAR2型)に変換される。

■TO_DATE関数
引数に指定された文字値を日付値に変換して戻す関数である。
TO_DATE(’20-12-02′)

TO_DATE(‘2003-JANUARY-05’, ‘RR-MON-DD’)

▼YY要素とRR要素の違い
YY 受け入れた値(年の下2桁)を、常に現在の世紀として扱う
RR 受け入れた値(年の下2桁)を、現在の年に近い世紀として扱う。

■NVL関数
引数の式1に指定された値がNULL値以外の場合は、式1を、NULL値の場合は、式2を戻す関数である。
戻り地のデータ型(数値、文字値、日付値)は、式1のデータ型とおなじになる。
必要に応じて、暗黙的なデータ型変換が行われ、変換できない場合は、エラーと成る。

NVL(式1, 式2)
式1、式2は、同じ型である必要がある。

NVL2関数
NVL2関数は、引数の式1に指定された値がNULL値以外の場合は、式2を、NULL値の場合は、式3を戻す関数である。
戻り値のデータ型(数値、文字値、日付値)は、常に式2のデータ型と同じになる。
変換できない場合は、エラーと成る。
式1がNULL値以外ー>式2を出力
NVL2( 式1, 式2, 式3
式1がNULL値ー>式3を出力

式2と式3は、同じデータ型でなければ、エラーと成る。          
データ型が違うとエラーとなる。         

■NULLIF関数
NULLIF関数は、引数に指定された2つの値を比較して、等しい場合はNULL値を戻し、等しくない場合は、式1を戻す関数である。
式1には、リテラルのNULL値以外を指定する必要がある。
式2には、リテラルのNULL値を指定できる。
式1=式2の場合は、NULL値を戻す
NULLIF (式1, 式2)
式1<>式2の場合は、式1を戻す。

■COALESCE関数
COALESCE関数は、引数に指定された式リストを先頭(左側)からチェックし、最初に見つかったNULL値以外の値を戻す関数である。
全ての式がNULL値の場合は、NULL値を戻す。
COALESCE(式1, 式2, 式3, 式n))

式リストに指定するデータは、すべて同じデータ型にする必要がある。

■条件式とDECODE関数

■CASE式
CASE式を使用すると、SQL文の中にIF-THEN-ELSEロジックを実装できる。

CASE 式 WHEN 条件式1 THEN 戻り値1
WHEN 条件式n THEN 戻り値n
ELSE デフォルトの戻り値
END

ELSEが設定されていない場合は、NULLTが戻り値となる。

CASE式にBETWEEN演算子は、使用できる。

■DECODE関数
CASE式と同様に、SQL文の中にIF-THEN-ELSEロジックを実装する。
Oracleデータベース固有の関数である。
処理手順や戻り値は、CASE式と同じである。

DECODE( 式(対象値), 条件式1, 戻り値1, 条件式2, 戻り値2, 条件式3, 戻り値3, デフォルトの戻り値)

対象値に対して、条件式1~3に当てはまらな場合、デフォルトの戻り値を出力する。

FX修飾子
FXとは、Format eXact(厳格な書式一致)のこと。
文字列引数は2桁が必要で、1桁の場合はエラーと成る。
FXの場合は、大文字と小文字を区別しない。
FXの文字列に空白があれば、日付書式にも空白を入れる必要がある。

数値書式要素
ドル記号をつける時は、数値書式要素にドル記号を使う。
ドル記号以外の通貨記号を付ける場合は、数値書式要素にLを使う。

L9,999,999 9は整数部の先行ゼロを空白に変える(先行ゼロプレス)
L0,000,000 0は、先行ゼロを0として表示する。