サーチ…


前書き

その列のデータ型に関係なく、列に値がない場合は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