Sql ISNULL-ON子句
我试图在这个Sql ISNULL-ON子句,sql,sql-server-2012,ssms,Sql,Sql Server 2012,Ssms,我试图在这个on子句上使用ISNULL、COALESCE或CASE,但它给了我一个错误 '关键字'between'附近的语法不正确' 我需要在另一个表的两个日期之间检查一个表中的一个日期,但是如果第二个表中不存在该日期,则使用前一个日期 talbe1 t1 JOIN table2 t2 ON t1.code = t2.code AND ISNULL(cast(dateadd(d,-1,t1.UtcFinishTime) as date) BETWEEN t2.TransactionFirstD
on
子句上使用ISNULL
、COALESCE
或CASE
,但它给了我一个错误
'关键字'between'附近的语法不正确'
我需要在另一个表的两个日期之间检查一个表中的一个日期,但是如果第二个表中不存在该日期,则使用前一个日期
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)
非常感谢。无法检查它,但在我的脑海中,下面的查询可能会有所帮助-
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
您的语法不正确,因为
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
或者使用案例
功能
但出于性能考虑,我建议您先进行检查,然后针对这两种情况进行具体查询