我试图在ISNULL
子句中使用COALESCE
,CASE
或ON
,但它给了我一个错误。
'关键字'在'。
之间的语法不正确
我需要从两个日期之间的一个表中检查一个日期,但是如果第二个表格上没有日期,则使用上一个日期。
talbe1 t1 JOIN table2 t2
ON t1.code = t2.code
AND ISNULL(cast(dateadd(d,-1,t1.UtcFinishTime) as date) BETWEEN t2.TransactionFirstDate and t2.TransactionLastDate,cast(dateadd(d,-2,t1.UtcFinishTime) as date) BETWEEN t2.TransactionFirstDate and t2.TransactionLastDate)
非常感谢。
答案 0 :(得分:1)
无法检查它,但在我的脑海中,下面的查询可能有所帮助 -
SELECT *
from table1 t1 JOIN table2 t2
ON t1.code = t2.code AND
CASE
WHEN dateadd(day,-1,t1.UtcFinishTime) is null
THEN cast(dateadd(day,-2,t1.UtcFinishTime) as date)
END
BETWEEN t2.TransactionFirstDate and t2.TransactionLastDate
答案 1 :(得分:1)
您的语法不正确,因为ISNULL
需要成为语句的一部分,因为它返回值;而不是整个陈述,所以你很可能会这样:
AND ISNULL(
cast(dateadd(d,-1,t1.UtcFinishTime) as date),
cast(dateadd(d,-2,t1.UtcFinishTime) as date)
)
BETWEEN t2.TransactionFirstDate and t2.TransactionLastDate
或使用CASE
功能。
但是我建议你出于性能考虑,事先进行检查,然后针对这两种情况进行特定查询。