【问题标题】:If Statement in my where clause with dates带有日期的 where 子句中的 If 语句
【发布时间】:2021-11-30 13:11:08
【问题描述】:

无论出于何种原因,我都无法在我的组织中使用 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())?此代码在周一至周五每天自动运行。

【问题讨论】:

  • 你可以使用DATEPART吗?
  • 是的,我相信我应该可以!
  • 您在哪个数据库中工作? IE。 Sql server、MySql等
  • 你所说的“工作日功能”的例子?

标签: sql if-statement where-clause dateadd


【解决方案1】:

既然你说你可以使用DATEPART,case语句检查当前日期是否是星期一,如果是,则减去3天得到星期五,否则减去1天,DATEPART返回一个数值开始1 代表星期日,7 代表星期六,所以星期一是我们检查 2 值的关注日期,这是 SQL Server 语法。

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

【讨论】:

  • 谢谢!这正好回答了我的问题!感谢您的及时回复!
  • @shadaet 不客气。
【解决方案2】:

我发现了一些我认为可以帮助您的 here

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多