如果在我的 where 子句中声明日期

If Statement in my where clause with dates

出于某种原因,我无法在我的组织中使用 SQL 中的工作日函数,因此我需要一些解决方法方面的帮助。我有一个 SQL 代码,它应该查询前一个工作日。所以这就是我们目前使用的:

select p.businessDate, p.accountNumber (more fields, but unecessary)
from Table p, 
where p.businessDate = dateadd(DAY, -1, today())

问题出在星期一,当我们星期五需要数据时,此查询从星期日提取数据。有没有办法绕过使用 dateadd(WEEKDAY, -1, today())?此代码 运行 自动,周一至周五,每天。

我发现了一些我认为可以帮助到你的东西here

如果你可以使用DATENAME那么你可以检查当前日期的名称是否是'Monday'。如果是,那么您可以 dateadd(DAY, -3, today()).

而不是 dateadd(DAY, -1, today())

既然你说你可以使用DATEPART,那么case语句检查当前日期是否是星期一,如果是,则减去3天得到星期五,否则减去1天,DATEPART returns 一个数值,从 1 开始表示星期日,然后移动到 7 表示星期六,所以星期一是我们检查值 2 的关注日期,这是 SQL 服务器 语法。

select p.businessDate, p.accountNumber (more fields, but unecessary)
from Table p, 
where businessDate = CASE WHEN DATEPART(WEEKDAY, GETDATE()) = 2 
THEN DATEADD(DAY, -3, GETDATE()) 
ELSE DATEADD(DAY, -1, GETDATE()) END

DATEPART 文档 - datepart-transact-sql