首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ISNULL - ON子句

ISNULL - ON子句
EN

Stack Overflow用户
提问于 2015-12-07 10:09:39
回答 2查看 73关注 0票数 0

我试图在这个ISNULL子句上使用COALESCECASE,但是它给了我一个错误。

‘不正确的语法靠近关键字’之间‘。

我需要在两个日期和另一个日期之间从一个表中检查一个日期,但是如果第二个表中不存在日期,那么使用前一个日期。

代码语言:javascript
复制
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) 

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-07 10:25:38

您的语法不正确,因为ISNULL在返回值时需要成为语句的一部分;而不是整个语句,因此您很可能在下面这样做:

代码语言:javascript
复制
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功能。

但是,为了性能起见,我建议您先进行检查,然后对这两种情况进行特定的查询。

票数 1
EN

Stack Overflow用户

发布于 2015-12-07 10:24:29

我无法检查,但我的头上,下面的疑问可能会有帮助-

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34130991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档