2

次のような WHERE 句を含むクエリがある場合:

where date1 > date2

date2 が null の場合はどうなりますか? date1 と date2 の両方が null でないことを指定する必要がありますか?

タイプは DATE() です

4

4 に答える 4

6

比較date1を試みNULL、不明と評価されます。

WHERE '2013-07-18' > NULL

不明です。NULL3 つの値を持つロジックでの動作に関する私のブログ投稿を参照してください。

ISNULLaroundのような関数を使用するdate2か、ロジックを明示的に書き出す必要があります。ただし、使用ISNULLすると、インデックスが使用されなくなります。あなたは書くことができます:

WHERE (date1 > date2 OR date2 IS NULL)
于 2013-07-18T15:50:40.530 に答える
1

と等しいかどうかを比較した場合、任意の値は、 と比較した場合でも、のNULL値を生成します。FalseNULLNULL

IS NULL演算子を使用して の値を確認できますNULL

于 2013-07-18T15:36:49.493 に答える
1

常に不明。NULL 値は IS NULL ステートメントで処理する必要があります

この例を試してください:

    declare @d1 datetime
    declare @d2 datetime
    set @d1 = GETDATE()

    select 
    case
        when @d1 > @d2 then 'OK'
        else 'KO'
    end
于 2013-07-18T15:33:10.683 に答える
1

null 許容日付に ISNULL を使用し、デフォルトの日付または他のフィールドに置き換えます。

例えば:

ここで、Date1 > ISNULL(date2, '1900-01-01') です。

いっそのこと、ハードコードをデフォルトのパラメータに置き換えてください。

@defaultvardt DATE = '1900-01-01' を宣言します。

Date1 > ISNULL(date2, @defaultvardt) の場合

于 2013-07-18T15:39:10.870 に答える