我收到此错误"'<'"附近的语法不正确。"。在where子句中使用大小写,比较运算符的正确方法是什么?
这是我的Sql查询:
SELECT COUNT(AL.PKAPPLICATIONID) FROM APPLICATIONLOGO AL
LEFT JOIN THIRDPARTYSESSIONKEY TSK ON AL.PKAPPLICATIONID = TSK.APPLICATIONSOURCEID WHERE
CASE WHEN TSK.CREATEDON IS NULL
THEN TSK.CREATEDON < GETDATE()
ELSE 1=1
END
答案 0 :(得分:3)
使用OR
:
SELECT Count(AL.Pkapplicationid)
FROM APPLICATIONLOGO AL
LEFT JOIN THIRDPARTYSESSIONKEY TSK
ON AL.Pkapplicationid = TSK.Applicationsourceid
WHERE TSK.Createdon IS NULL
OR TSK.Createdon < Getdate()
我认为这是实际的逻辑,因为你的不合理:
WHEN TSK.Createdon IS NULL THEN TSK.Createdon < Getdate()
或者你真的想在Createdon IS NULL
的情况下使用不同的列吗?
然后您可以使用COALESCE
/ ISNULL
:
WHERE COALESCE(TSK.Createdon, TSK.OtherColumn) < Getdate()
答案 1 :(得分:1)
这是您的where
条款:
WHERE CASE WHEN TSK.CREATEDON IS NULL THEN TSK.CREATEDON < GETDATE() ELSE 1=1
END
我认为你的意思是IS NOT NULL
;否则逻辑没有多大意义。
通常,在case
子句中使用where
的最佳方法是避免它。以下内容更易于阅读,可能更符合您的意图:
WHERE TSK.CREATEDON IS NULL OR TSK.CREATEDON < GETDATE()
您的版本的原始逻辑很简单:
WHERE TSK.CREATEDON IS NOT NULL
而且,您问题的具体答案是case
语句返回值,而布尔结果不是值。因此,以下内容不起作用:
where (case when c = 'a' then a = b else c = b end)
以下是:
where (case when c = 'a' then a else c end) = b
但正如我所说,在大多数情况下,最好只使用基本的逻辑运算符。
答案 2 :(得分:0)
您是否尝试将CREATEDON日期的所有记录设置为昨天及更早版本,并且应包含CREATEDON为NULL的列。如果是这种情况,则以下查询将起作用
SELECT COUNT(AL.PKAPPLICATIONID)
FROM APPLICATIONLOGO AS AL
LEFT JOIN THIRDPARTYSESSIONKEY AS TSK
ON AL.PKAPPLICATIONID = TSK.APPLICATIONSOURCEID
WHERE CAST(ISNULL(TSK.CREATEDON,GETDATE()-1) AS DATE) < CAST(GETDATE() AS DATE)