sql >> データベース >  >> RDS >> Sqlserver

SQL Server IFとIIF():違いは何ですか?

    新しいプログラミング言語を学ぶ学生は、多くの場合、最初のレッスンをIFで開始します。 ステートメント。式が真の場合にのみ、ステートメントが値を返します。

    その後、IF... ELSEに進む可能性があります ステートメント。式がfalseの場合に返す別の値を決定できます。したがって、式がtrueの場合は1つの値を返し、falseの場合は別の値を返します。

    SQLServerには確かにIF... ELSEが含まれています T-SQLツールボックスのステートメント。

    SQL Serverには、IIF()も含まれています 関数。これは同様のことを行いますが、構文はより簡潔です。

    ただし、微妙な違いがいくつかあります。

    違い

    次の表に、IFの主な違いの概要を示します。 ステートメントとIIF() 機能。

    IF IIF()
    タイプ フロー制御ステートメント。 論理関数。
    結果はどのように決定されますか? 実行するSQLステートメントまたはステートメントブロックを指定します。 返す実際の値を指定します。
    ネスト? ネストされたレベルの数の制限は、使用可能なメモリによって異なります。 ネストできるのは最大レベル10までのみです。
    式がfalseを返した場合はどうなりますか? ELSE キーワードはオプションです(つまり、誤った結果に対応するかどうかを選択できます)。 trueとfalseの両方の値が必要です(つまり、falseの結果に対応する必要があります)。

    IIF() 関数は、実際にはCASEを作成するための簡単な方法です。 表現。したがって、CASEと同じ制限があります。 IFとは異なる式 ステートメント。

    IFステートメント

    これがIFです ステートメント。

    IF 1 < 2 SELECT 'True';

    結果:

    True

    この場合、評価する式は1 < 2です。 。 1が2未満であることは事実なので、SELECT ステートメントが実行され、True 返されました。

    ただし、式がfalseの場合、何も起こりません。

    IF 1 > 2 SELECT 'True';

    結果:

    Commands completed successfully.

    SQL Serverが教えてくれたのは、コマンドが正常に完了したということだけです。他に何も指定されていないため、他に何も返されませんでした。

    IF…ELSEステートメント

    この場合、オプションのELSEを追加できます IFに ステートメント、それがIF... ELSEになるように ステートメント。

    IF 1 > 2
           SELECT 'True';
    ELSE 
           SELECT 'False';

    結果:

    False

    これで、式がfalseの場合にも結果が得られます。

    IIF()関数

    IIF() 関数を使用すると、より簡潔な構文を使用して同じロジックを記述できます。

    したがって、前の例を次のように書き直すことができます。

    SELECT IIF( 1 > 2, 'True', 'False' );

    結果:

    False

    IIF() 関数は基本的に、IF... ELSEを実行するためのより簡潔な方法です。 声明。

    実際、それは部分的にしか真実ではありません。前述のように、IIF() 関数はCASEに基づいています 式であるため、CASEと同じ制限があります 式(最大レベル10までしかネストできないなど)。

    したがって、前のステートメントは次のステートメントと同等です。

    SELECT 
      CASE WHEN 1 > 2 THEN 'True'
        ELSE 'False'
      END;

    結果:

    False

    IIF()に注意してください 2つの引数が必要なため、式の結果がfalseの場合に返す値を指定する必要があります(NULLを指定した場合でも) または空の文字列)。


    1. 前月のすべての日付を一覧表示するoraclesqlクエリ

    2. SQLAlchemy ON DUPLICATE KEY UPDATE

    3. SQLの設計とクエリを試すためのオンラインツール

    4. フィールド値がNullの場合にOracleでテーブルを更新し、その更新が成功したかどうかを判断する