我试图在这个ISNULL子句上使用COALESCE或CASE,但是它给了我一个错误。
‘不正确的语法靠近关键字’之间‘。
我需要在两个日期和另一个日期之间从一个表中检查一个日期,但是如果第二个表中不存在日期,那么使用前一个日期。
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) 非常感谢。
发布于 2015-12-07 10:25:38
您的语法不正确,因为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功能。
但是,为了性能起见,我建议您先进行检查,然后对这两种情况进行特定的查询。
发布于 2015-12-07 10:24:29
我无法检查,但我的头上,下面的疑问可能会有帮助-
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.TransactionLastDatehttps://stackoverflow.com/questions/34130991
复制相似问题