私はSQLで書いている手続きで興味深い問題に直面しました。SQL日付変数とnullをこのように比較するのはなぜですか?
私のprocでは2つの日付があります。これはオプションのparamsがNULLにデフォルト設定されています。これらのparamsがnullでないか、procの一部を実行しないかどうかを確認したい場合は、無視されます。
私は非常に基本的なIF(@dateVariable <> NULL AND @DateVariable2 <> NULL)
ステートメントを実行しましたが、変数がNULLでなくてもifステートメントは機能しません。SQLはNULLを日付と比較するのに苦労しています。
これを回避するには、ちょうど正しく動作するIF(DateVariable IS NOT NULL)
を実行しました。私もIF(ISNULL(@DateVariable,'') <> '')
も正しく試しました
私の質問は、最初のIFは動作しませんが、2番目と3番目のIFは両方ともどちらかの点で変数の内容をnullと比較する必要があるからですか?
例:
-----は-----
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (@Date <> NULL)
BEGIN
print('a')
END
-----は-----
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (ISNULL(@Date,'') <> '')
BEGIN
print('a')
END
DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP
IF (@Date IS NOT NULL)
BEGIN
print('a')
END
[3値論理(http://www.simple-talk.com/sql/learn-sql-server/sql-and-the-snare-of-three-valuedを見ます-logic /) –
「NULL」を「未知の値」と考えてください。 '@Date = Unknown Yet Value'は何をもたらすべきですか? 「真」? 「偽」?あるいは「わからない」? –