相关疑难解决方法(0)

为什么将SQL日期变量与null进行比较会以这种方式运行?

我刚刚遇到一个有趣的问题,我正在用SQL编写一个程序.

在我的proc中我有2个日期,它们是默认为NULL的可选参数,我想检查这些参数是否为空并且如果不是我的proc的一部分,如果它们为null则则忽略proc的额外部分.

我做了一个相当基本的IF(@dateVariable <> NULL AND @DateVariable2 <> NULL)声明,但if语句永远不会工作,即使变量不为null,我会假设SQL正在努力将日期与NULL进行比较,这很奇怪,因为datetime可以为空.

为了解决这个问题我只是做了IF(DateVariable IS NOT NULL)正确的工作.我也尝试过IF( ISNULL(@DateVariable,'') <> '')也能正常工作

所以我的问题是为什么第一个IF不起作用,但第二个和第三个IF都这样做,因为两者都必须在某个时候将变量的内容与null进行比较?

例:

-----失败-----

DECLARE @Date DATETIME
SET @Date = CURRENT_TIMESTAMP

IF (@Date <> NULL)
BEGIN
    print('a')
END
Run Code Online (Sandbox Code Playgroud)

-----作品-----

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
Run Code Online (Sandbox Code Playgroud)

sql sql-server stored-procedures sql-server-2008

6
推荐指数
2
解决办法
1万
查看次数