ISNULL - ON条款

时间:2015-12-07 10:09:40

标签: sql sql-server-2012 ssms

我试图在ISNULL子句中使用COALESCECASEON,但它给了我一个错误。

  

'关键字'在'。

之间的语法不正确

我需要从两个日期之间的一个表中检查一个日期,但是如果第二个表格上没有日期,则使用上一个日期。

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) 

非常感谢。

2 个答案:

答案 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功能。

但是我建议你出于性能考虑,事先进行检查,然后针对这两种情况进行特定查询。