CASEとNULL - Teradata Database - Teradata Vantage NewSQL Engine - CASEとNull。

Teradata Vantage™ SQL関数、演算子、式および述部

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/xzf1512079057909.ditamap
dita:ditavalPath
ja-JP/xzf1512079057909.ditaval
dita:id
B035-1145
Product Category
Software
Teradata Vantage

ANSI SQL:2011規格では、CASE式および関連する式のCOALESCEとNULLIFは、NULLを戻す能力を持つと指定されています。

NULLとCASE式

CASE、NULLIF、およびCOALESCE式におけるnull使用のルールは、次のとおりです。

  • ELSE句がCASE式で指定されていない場合、評価がすべてのWHEN句を通過すると、結果はnullになります。
  • nullとnullを含む式は、値形式のCASE式内のvalue_expression_1として有効です。

    次の例は有効です。

       SELECT CASE NULL
               WHEN 10 
               THEN 'TEN'
              END;
       
       SELECT CASE NULL + 1
               WHEN 10 
               THEN 'TEN'
              END;
       

    上記の例ではELSE句が指定されていないので、どちらの例もNULLを戻します。また、NULLはどの値ともまたはNULLとも等しくないので、評価はWHENになります。

  • 任意の値またはNULLに対してNULLを比較すると、常にFALSEになります。NULLに関するテストでは、WHEN条件内でIS NULLまたはIS NOT NULLを使用する検索形式のCASE式を使うのが最善です。

    次の例は有効です。

       SELECT CASE
               WHEN column_1 IS NULL
               THEN 'NULL'
              END
       FROM table_1;
       

    多くの場合Teradata Databaseは、常にNULLと評価される式が他の式またはNULLと比較された場合にそれを検出できるので、エラーを示して、IS NULLまたはIS NOT NULLの使用を推奨します。ANSI SQLでは、これをエラーとは判断しませんが、ユーザーがこの方法でのNULLの比較を意図することはほとんどないため、Teradata Databaseではエラーがレポートされることに注意してください。

    次の例は無効です。

       SELECT CASE column_1
               WHEN NULL
               THEN 'NULL'
              END
       FROM table_1;
       
       SELECT CASE column_1
               WHEN NULL + 1
               THEN 'NULL'
              END
       FROM table_1;
       SELECT CASE
               WHEN column_1 = NULL
               THEN 'NULL'
              END
       FROM table_1;
       SELECT CASE
               WHEN column_1 = NULL + 1
               THEN 'NULL'
              END
       FROM table_1;

  • nullおよびnullを含む式は、THEN句の式として有効です。

    次の例は有効です。

       SELECT CASE
               WHEN column_1 = 10
               THEN NULL
              END
       FROM table_1


    上記の例とは異なり、このTHEN句内のNULLはSQLキーワードであり文字リテラルの値ではないことに注意してください。