加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server-2008 – 在WHERE子句中使用CASE语句

发布时间:2020-12-12 06:28:21 所属栏目:MsSql教程 来源:网络整理
导读:我在这里和其他地方看过很多类似的问题,我不知道如何推断他们对我需要的内容,所以我选择了我的方案. 基本上,我需要检查一行的日期是否在某个日期之前.日期,(这在我之前,尽管不喜欢系统,但我无能为力)被存储为一个单独的数字,对应于一年中的天数.例如,1月1日是
我在这里和其他地方看过很多类似的问题,我不知道如何推断他们对我需要的内容,所以我选择了我的方案.

基本上,我需要检查一行的日期是否在某个日期之前.日期,(这在我之前,尽管不喜欢系统,但我无能为力)被存储为一个单独的数字,对应于一年中的天数.例如,1月1日是1月,2月1日是32等等…所以,通过将该数字添加到12/31 /来计算日期.我遇到的问题是,当我检查一个跨越新年的时期时,它会带回(例如)今年12月29日,而不是最后一年.我在SELECT中遇到了这个问题,CASE语句运行正常.但是,在WHERE子句中,它没有按预期工作.在where子句中,我需要检查以确保它不是一个周末. (同样,代码早于我,我无法改变太多,遗憾的是)

所以,我现在在WHERE子句中有这个:

CASE 
    WHEN (dateadd(dd,t.periodid,'12/31/2013') > '01/24/2014') THEN AND (DATEPART(DW,convert(varchar,dateadd(dd,'12/31/2012'),107)) NOT IN (1,7) OR t.periodid IS NULL) 
    WHEN (dateadd(dd,'12/31/2013') <= '01/24/2014') THEN AND (DATEPART(DW,'12/31/2013'),107)) NOT IN(1,7) OR t.periodid IS NULL)    
END

(即:如果日期大于该期间的最后一天,请将该数字添加到两年前并检查是否是周末.否则,将其添加到上一年的12/31并检查是否是周末.)

我认为我认为它失败了,因为我的情况应该更像是:

AND X = CASE.....

但在这种情况下我不知道该把什么作为X.

解决方法

如果你想在其中使用case语句,你的where子句看起来应该是这样的:
WHERE 
(CASE 
    WHEN (dateadd(dd,'12/31/2013') > '01/24/2014') AND (DATEPART(DW,7) OR t.periodid IS NULL) THEN 1
    WHEN (dateadd(dd,'12/31/2013') <= '01/24/2014') AND (DATEPART(DW,7) OR t.periodid IS NULL) THEN 1
    ELSE 0   
END) = 1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读