質問

私のソーステーブルは次のようになります。

Id     StartDate
1      (null)
2      12/12/2009
3      10/10/2009

私は、上記の選択select文を作成したいのですが、また、日付のようなnullでない場合はvarcharを表示するための追加の列があります:

Id     StartDate    StartDateStatus
1      (null)       Awaiting
2      12/12/2009   Approved
3      10/10/2009   Approved

私は自分の選択には、以下の持っているが、それが動作していないようです。ステータスのすべてが日付は、いくつかのヌルを持っているにもかかわらずApprovedするように設定されている。

        select
             id,
             StartDate,
        CASE StartDate
        WHEN null THEN 'Awaiting'
        ELSE 'Approved' END AS StartDateStatus
        FROM myTable

私のクエリの結果は次のようになります:

Id     StartDate    StartDateStatus
1      (null)       Approved
2      12/12/2009   Approved
3      10/10/2009   Approved
4      (null)       Approved
5      (null)       Approved

開始日は、smalldatetimeですこれはどう扱われるべきかにはいくつかの例外はありますか?

おかげ

役に立ちましたか?

解決

試します:

select
     id,
     StartDate,
CASE WHEN StartDate IS NULL
    THEN 'Awaiting'
    ELSE 'Approved' END AS StartDateStatus
FROM myTable

あなたのコードは、ときに開始日= NULLをやっているだろう、と思います。

<時間> (NULL値が存在しないように)

NULLNULLに等しいことはありません。 NULLNULLと等しくないことはありません。構文は、上記のANSI SQL標準であり、逆はStartDate IS NOT NULLされるだろう。

あなたは次のことを実行することができます:

SELECT CASE WHEN (NULL = NULL) THEN 1 ELSE 0 END AS EqualityCheck,
CASE WHEN (NULL <> NULL) THEN 1 ELSE 0 END AS InEqualityCheck,
CASE WHEN (NULL IS NULL) THEN 1 ELSE 0 END AS NullComparison

そして、これが返されます:

EqualityCheck = 0
InEqualityCheck = 0
NullComparison = 1
<時間>

完全については、SQL Serverで使用することができます:

SET ANSI_NULLS OFF;

どの比較が異なっ作業あなたのイコールになります。

SET ANSI_NULLS OFF

SELECT CASE WHEN (NULL = NULL) THEN 1 ELSE 0 END AS EqualityCheck,
CASE WHEN (NULL <> NULL) THEN 1 ELSE 0 END AS InEqualityCheck,
CASE WHEN (NULL IS NULL) THEN 1 ELSE 0 END AS NullComparison

返します:

EqualityCheck = 1
InEqualityCheck = 0
NullComparison = 1

しかし、私は非常にこれを行うことに対して推薦します。その後、あなたのコードを維持する人々

...あなたを追い詰めるとあなたを傷つけることを強制される可能性があります

また、それはもはやSQL Serverの次期バージョンでは動作しません。

https://msdn.microsoft.com/en-GB/library/ ms188048.aspxする

他のヒント

select Id, StartDate,
Case IsNull (StartDate , '01/01/1800')
When '01/01/1800' then
  'Awaiting'
Else
  'Approved'
END AS StartDateStatus
From MyTable
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top