我正尝试在SQL中建立查询,以返回上一个工作日所需的数据。该代码每周(星期一至星期五)运行五天。
如果代码在星期一运行,我将编写哪些代码返回星期五数据?
注意:我是新来的,所以请告诉我确切的位置在哪里放置什么代码,谢谢
当前,我的代码运行正常,因此在星期二,我将获取星期一的数据;星期五,我得到星期四的数据,等等。但是,星期一,我的代码返回星期天的数据(为空)。
SELECT Distinct
[Entry Date]
FROM
myTable
WHERE
[entry date] >= dateadd(day,datediff(day,1,GETDATE()),0) AND
[entry date] < dateadd(day,datediff(day,0,GETDATE()),0)
答案 0 :(得分:0)
如果使用的是SQL Server,则可以通过使用如下的if-else结构来解决问题:
IF(DATEPART(dw,GETDATE())=1)
BEGIN
SELECT *
FROM myTable
WHERE [entry date] >= dateadd(day,-3,GETDATE())
END
ELSE
BEGIN
SELECT *
FROM myTable
WHERE [entry date] >= dateadd(day,-1,GETDATE())
END
答案 1 :(得分:0)
您可以将其编写为单个查询:
SELECT Distinct t.[Entry Date]
FROM myTable t CROSS JOIN
(VALUES (CASE WHEN FORMAT(GETDATE(), 'ddd', 'en-us') = 'Mon' THEN -3
ELSE -1
END)
) v(offset)
WHERE [entry date] >= DATEADD(DAY, offset, CONVERT(DATE, GETDATE())) AND
[entry date] < DATEADD(DAY, offset + 1, CONVERT(DATE, GETDATE()));
在文化说明符中使用FORMAT()
可以使代码与任何国际化设置一起使用。没有几周开始的基本假设。
GETDATE()
上的转换是可转换的(“索引安全”),因此代码也可以利用可用索引。