You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2012中T-SQL如何排除特定时间段及周末数据?

解决SQL Server 2012中筛选指定日期区间并排除周末的问题

没问题,我帮你把这个T-SQL查询调整正确,同时适配SQL Server 2012的特性,确保逻辑完全符合你的需求。

首先,直接给你可用的完整查询:

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')

关键细节解释:

  • 括号的必要性:一定要把两个日期区间的OR条件用括号包裹起来。如果省略括号,由于AND的优先级高于OR,查询逻辑会变成“在第一个区间且不是周末,或者在第二个区间(不管是不是周末)”,这完全不符合你的筛选要求。
  • 关于周末过滤的稳定性:DATENAME(dw, [CreatedOn])返回的是星期的英文名称,但这个结果会受SQL Server的语言设置影响。如果你的服务器语言不是英文,返回的会是对应语言的星期名(比如中文的“星期六”),这时候NOT IN ('Saturday', 'Sunday')就会失效。

更稳定的写法是用DATEPART(dw, [CreatedOn]),它返回数字代表星期几(默认美国英语设置下,1=周日,7=周六):

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]) NOT IN (1, 7)

如果不确定你的服务器DATEFIRST设置(也就是哪一天作为一周的第一天),可以用SELECT @@DATEFIRST查看。比如如果DATEFIRST是1(周一为第一天),那么周六是6,周日是7,这时候条件要改成NOT IN (6, 7)。

内容的提问来源于stack exchange,提问作者user3115933

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:34:25