OracleSQLについて教えて下さい。
Silverの勉強中です。
NVL関数での暗黙のデータ型変換についてご質問させてください。
NVL関数は第1引数と第2引数を同じにしないといけないようですが、
①では暗黙の型変換が行われず、②では暗黙のデータ型変換が行われるのはなぜでしょうか?
① SELECT promo_name, NVL(promo_end_date - promo_begin_date, '進行中') status
FROM promotions;
NVL関数の第2引数には、第1引数と同じデータ型の値を指定しなければなりません。
promo_end_date - promo_begin_dateがNULLの場合に文字列「進行中」を表示しようとしていますが、
promo_end_date - promo_begin_dateは数値のため、エラーとなります。
② SELECT TO_CHAR(payment_date, 'RR-MM-DD HH24:MI:SS') "決済日時", NVL(TO_CHAR(payment_amt, 'L99,999,999'), -1) "金額"
FROM payments
WHERE TO_CHAR(payment_date, 'HH24') < 15;
NVL(TO_CHAR(payment_amt, 'L99,999,999'), -1)で、PAYMENT_AMT列がNULL値であれば-1を、
そうでなければ書式化した文字列になるように指定しています。
NVLの第1引数が文字列で第2引数が数値ですが、暗黙的なデータ変換が行われるためエラーとなりません。正しいSQL文です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。