sql中的日期不等式

时间:2014-02-01 11:57:49

标签: sql-server sql-server-2008 tsql

我有以下情况:

declare @b datetime 
declare @d datetime 
set @b='2014-01-31 00:00:00.000'
set @d='2014-01-31 00:00:00.000'--NULL

IF @b <> @d
    PRINT 'N'
ELSE
    PRINT 'Y'

当@b和@d是有效值时,上述代码表现良好 但是当它们中的任何一个为空时,它无法进行比较 那么推荐的方法是什么,因为我在null不等式检查中也是null可能/可接受的情况?

我正在使用MSSQL2008

3 个答案:

答案 0 :(得分:4)

您可以使用

IF EXISTS(SELECT @b EXCEPT SELECT @d)
    PRINT 'N'
ELSE
    PRINT 'Y'

答案 1 :(得分:0)

null不是SQL中的值 - 缺少值。因此,当您将其与任何实际值进行比较时,retsult是未知的,不会评估为true

如果你想处理null,你应该明确地这样做。 E.g:

IF (@B IS NULL AND @d IS NOT NULL) OR (@B IS NOT NULL AND @d IS NULL) OR (@b <> @d))
    PRINT 'N'
ELSE
    PRINT 'Y'

答案 2 :(得分:0)

您可以更改设置以满足您的要求:

SET ANSI_NULLS OFF
declare @b datetime 
declare @d datetime 
set @b='2014-01-31 00:00:00.000'
set @d='2014-01-31 00:00:00.000'--NULL

IF @b <> @d
    PRINT 'N'
ELSE
    PRINT 'Y'