WHERE
u.id = 73
AND
cast(reading_time as date) BETWEEN DATEADD(day,-8, GETDATE()) AND GETDATE()
我如何才能获得最近7个工作日?
答案 0 :(得分:2)
试试这个( TL; DR ):
WHERE
CAST(READING_TIME AS DATE) BETWEEN DATEADD(DAY, -8, GETDATE()) AND GETDATE())
AND DATEPART(DW, CAST(READING_TIME AS DATE)) IN (1, 2, 3, 4, 5)
<强>更新强>
这是一个更全面的脚本,可帮助您从数据中提取正确的工作日。根据您居住的地方,工作日可以是Monday-Friday
或Sunday-Thursday
,也可能是其他人(我不知道其他人)。
DECLARE @TEST TABLE(READING_TIME DATETIME);
INSERT INTO @TEST VALUES('12-JAN-2016');
INSERT INTO @TEST VALUES('11-JAN-2016');
INSERT INTO @TEST VALUES('10-JAN-2016');
INSERT INTO @TEST VALUES('9-JAN-2016');
INSERT INTO @TEST VALUES('8-JAN-2016');
INSERT INTO @TEST VALUES('7-JAN-2016');
INSERT INTO @TEST VALUES('6-JAN-2016');
INSERT INTO @TEST VALUES('5-JAN-2016');
INSERT INTO @TEST VALUES('4-JAN-2016');
INSERT INTO @TEST VALUES('3-JAN-2016');
INSERT INTO @TEST VALUES('2-JAN-2016');
INSERT INTO @TEST VALUES('1-JAN-2016');
DECLARE @TO_DATE DATE;
SET @TO_DATE = '12-JAN-2016';
-- SET DATEFIRST 1;
SELECT
READING_TIME
, DATEPART(DW, READING_TIME) AS [Day of the week]
, DATENAME(DW, READING_TIME) AS [Day of the week - name]
FROM @TEST
WHERE CAST(READING_TIME AS DATE) BETWEEN DATEADD(DAY, -8, @TO_DATE) AND @TO_DATE
AND DATEPART(DW, CAST(READING_TIME AS DATE)) IN (1, 2, 3, 4, 5);
我的脚本中的"Day of the week - name"
列将帮助您了解并确保您获得正确的工作日,这也是您上下文中的工作日。
我还添加了一个SET DATEFIRST 1
命令,它将星期一的第一个日期设置为星期一,以防您的系统另外(但仅用于运行此脚本)。
根据此变量的值,"Day of week"
中的值会发生变化,您显然必须更改WHERE
子句中的值。
希望所有这一切都清楚。