Oracle Database
NULL値の処理
サーチ…
前書き
その列のデータ型に関係なく、列に値がない場合はNULLです。この構文を使用してNULLをNULLと比較しないでください。結果はUNKNOWNになるため、
a = NULL
してください。代わりにa IS NULL
またはa IS NOT NULL
条件を使用a IS NULL
a IS NOT NULL
。 NULLはNULLと等しくないnullが発生する可能性のある2つの式を比較するには、以下で説明する関数のいずれかを使用します。連結を除くすべての演算子は、そのオペランドの1つがNULLの場合はNULLを返します。たとえば、 3 * NULL + 5
の結果はNULLです。
備考
NULLは、PRIMARY KEYまたはNOT NULL制約によって制限された列には表示されません。 (例外はNOVALIDATE句を持つ新しい制約です)
任意のデータ型の列にNULLを含めることができます
SELECT 1 NUM_COLUMN, 'foo' VARCHAR2_COLUMN from DUAL
UNION ALL
SELECT NULL, NULL from DUAL;
NUM_COLUMN | VARCHAR2_COLUMN |
---|---|
1 | foo |
(ヌル) | (ヌル) |
空文字列がNULLです
SELECT 1 a, '' b from DUAL;
A | B |
---|---|
1 | (ヌル) |
NULLを含む操作は、連結を除いてNULLです。
SELECT 3 * NULL + 5, 'Hello ' || NULL || 'world' from DUAL;
3 * NULL + 5 | 'HELLO' || NULL || 'WORLD' |
---|---|
(ヌル) | こんにちは世界 |
ヌル値を置き換えるNVL
SELECT a column_with_null, NVL(a, 'N/A') column_without_null FROM
(SELECT NULL a FROM DUAL);
COLUMN_WITH_NULL | COLUMN_WITHOUT_NULL |
---|---|
(ヌル) | N / A |
NVLは、NULLを含むことができる2つの値を比較するのに便利です。
SELECT
CASE WHEN a = b THEN 1 WHEN a <> b THEN 0 else -1 END comparison_without_nvl,
CASE WHEN NVL(a, -1) = NVL(b, -1) THEN 1 WHEN NVL(a, -1) <> NVL(b, -1) THEN 0 else -1 END comparison_with_nvl
FROM
(select null a, 3 b FROM DUAL
UNION ALL
SELECT NULL, NULL FROM DUAL);
COMPARISON_WITHOUT_NVL | COMPARISON_WITH_NVL |
---|---|
-1 | 0 |
-1 | 1 |
NVL2は、値がnullの場合とは異なる結果を得る
最初のパラメータがNOT NULLの場合、NVL2は2番目のパラメータを返します。それ以外の場合は、3番目の値が返されます。
SELECT NVL2(null, 'Foo', 'Bar'), NVL2(5, 'Foo', 'Bar') FROM DUAL;
NVL2(NULL、 'FOO'、 'BAR') | NVL2(5、 'FOO'、 'BAR') |
---|---|
バー | フー |
最初の非NULL値を返すCOALESCE
SELECT COALESCE(a, b, c, d, 5) FROM
(SELECT NULL A, NULL b, NULL c, 4 d FROM DUAL);
COALESCE(A、B、C、D、5) |
---|
4 |
場合によっては、2つのパラメータを持つCOALESCEを使用する方が、2つ目のパラメータが定数でない場合にNVLを使用するよりも高速になる場合があります。 NVLは常に両方のパラメータを評価します。 COALESCEは、遭遇した最初の非NULL値で停止します。つまり、最初の値がNULLでない場合、COALESCEはより高速になります。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow