如何在特定时间段内排除特定日期范围?

时间:2018-03-26 06:57:47

标签: sql sql-server tsql sql-date-functions

我正在使用SQL Server 2012,我需要T-SQL查询来排除特定时间段内的特定时间范围。

我的过滤逻辑如下:

提取介于2016-07-012017-03-25之间以及2017-07-012018-03-25之间的所有数据,并排除上述过滤期内所有星期六和星期日的日期。

我的T-SQL查询如下:

SELECT * from Table1
 WHERE [CreatedOn] between ...
 AND DATENAME(dw,[CreatedOn]) NOT IN ('Saturday', 'Sunday')

我坚持如何在Line 2正确编写逻辑!

3 个答案:

答案 0 :(得分:4)

这对你有用

SELECT * from Table1
WHERE 
(
    [CreatedOn] BETWEEN '2016-07-01' AND '2017-03-25' OR
    [CreatedOn] BETWEEN '2017-07-01' AND '2018-03-25'
)
AND ((DATEPART(dw, [CreatedOn]) + @@DATEFIRST) % 7) NOT IN (0, 1)

FOR KNOWLEDGE

  

master数据库的syslanguages表有一个DateFirst列   定义特定语言的一周的第一天。 SQL   使用美国英语作为默认语言的服务器,SQL Server设置DATEFIRST   默认为7(星期日)。我们可以重置任何一天作为第一天   一周使用

SET DATEFIRST 5

这将星期五定为一周的第一天。

@@ DATEFIRST返回SET DATEFIRST的当前会话值。

SELECT @@DATEFIRST

Reference

答案 1 :(得分:2)

BETWEENANDOR结合使用。

SELECT 
    * 
from 
    Table1
WHERE 
    (
        [CreatedOn] BETWEEN '2016-07-01' AND '2017-03-25' OR
        [CreatedOn] BETWEEN '2017-07-01' AND '2018-03-25'
    )
    AND DATENAME(dw,[CreatedOn]) NOT IN ('Saturday', 'Sunday')
    AND CreatedOn NOT BETWEEN '2017-01-01' AND '2017-01-02' 

答案 2 :(得分:2)

试试这个:

SELECT * from Table1
WHERE 
([CreatedOn] BETWEEN '2016-07-01' AND '2017-03-25'
 OR
[CreatedOn] BETWEEN '2017-07-01' AND '2018-03-25') 
AND DATENAME(dw,[CreatedOn]) NOT IN ('Saturday', 'Sunday')