gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:19:18 24 4
gpt4 key购买 nike

我在这里和其他地方看过很多类似的问题,但我不知道如何将他们所说的内容推断为我需要的内容,所以我选择询问我的场景。

基本上,我需要检查一行的日期是否在某个日期之前。日期(这比我早,尽管不喜欢系统,但我无能为力)仅存储为一个数字,该数字对应于一年中的天数。例如,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, t.periodid, '12/31/2012'), 107)) NOT IN (1,7) OR t.periodid IS NULL)
WHEN (dateadd(dd, t.periodid, '12/31/2013') <= '01/24/2014') THEN AND (DATEPART(DW, convert(varchar, dateadd(dd, t.periodid, '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, t.periodid, '12/31/2013') > '01/24/2014') AND (DATEPART(DW, convert(varchar, dateadd(dd, t.periodid, '12/31/2012'), 107)) NOT IN (1,7) OR t.periodid IS NULL) THEN 1
WHEN (dateadd(dd, t.periodid, '12/31/2013') <= '01/24/2014') AND (DATEPART(DW, convert(varchar, dateadd(dd, t.periodid, '12/31/2013'), 107)) NOT IN(1,7) OR t.periodid IS NULL) THEN 1
ELSE 0
END) = 1

关于sql-server-2008 - 在 WHERE 子句中使用 CASE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21172757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com