我正在使用SQL Server 2012
,我需要T-SQL
查询来排除特定时间段内的特定时间范围。
我的过滤逻辑如下:
提取介于2016-07-01
和2017-03-25
之间以及2017-07-01
和2018-03-25
之间的所有数据,并排除上述过滤期内所有星期六和星期日的日期。
我的T-SQL
查询如下:
SELECT * from Table1
WHERE [CreatedOn] between ...
AND DATENAME(dw,[CreatedOn]) NOT IN ('Saturday', 'Sunday')
我坚持如何在Line 2
正确编写逻辑!
答案 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
答案 1 :(得分:2)
将BETWEEN
与AND
和OR
结合使用。
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')