17.10 - CASEとNULL - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL関数、式、および述部

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1145-171K-JPN
Language
日本語 (日本)

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;
       

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

    次の例は無効です。

       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キーワードであり文字リテラルの値ではないことに注意してください。