显示后7个工作日内

时间:2016-01-12 16:14:54

标签: sql-server

WHERE   
        u.id = 73
        AND 
        cast(reading_time as date) BETWEEN DATEADD(day,-8, GETDATE()) AND GETDATE()

我如何才能获得最近7个工作日?

1 个答案:

答案 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-FridaySunday-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子句中的值。

希望所有这一切都清楚。