我刚刚遇到一个有趣的问题,我正在用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)