【问题标题】:How do I exclude Weekend days in a SQL Server query?如何在 SQL Server 查询中排除周末?
【发布时间】:2025-12-10 04:55:02
【问题描述】:

如何排除 DateTime 列中周六或周日的值?

例如,给定以下数据:

date_created
'2009-11-26 09:00:00'  -- Thursday
'2009-11-27 09:00:00'  -- Friday
'2009-11-28 09:00:00'  -- Saturday
'2009-11-29 09:00:00'  -- Sunday
'2009-11-30 09:00:00'  -- Monday

这是我正在寻找的结果:

date_created
'2009-11-26 09:00:00'  -- Thursday
'2009-11-27 09:00:00'  -- Friday
'2009-11-30 09:00:00'  -- Monday

谢谢!

【问题讨论】:

    标签: sql-server tsql date weekend


    【解决方案1】:

    试试DATENAME()函数:

    select [date_created]
    from table
    where DATENAME(WEEKDAY, [date_created]) <> 'Saturday'
      and DATENAME(WEEKDAY, [date_created]) <> 'Sunday'
    

    【讨论】:

      【解决方案2】:

      假设您使用的是 SQL Server,请将 DATEPART 与 dw 一起使用:

      SELECT date_created
      FROM your_table
      WHERE DATEPART(dw, date_created) NOT IN (1, 7);
      

      编辑:我应该指出,DATEPART(dw) 返回的实际数值是由使用 SET DATEFIRST 设置的值确定的:
      http://msdn.microsoft.com/en-us/library/ms181598.aspx

      【讨论】:

      • 可以自动处理DATEFIRST 的任何可能设置。详情见我的回答。
      【解决方案3】:

      答案取决于你的服务器的周开始设置,所以它是

      SELECT [date_created] FROM table WHERE DATEPART(w,[date_created]) NOT IN (7,1)
      

      如果星期日是您服务器一周的第一天

      SELECT [date_created] FROM table WHERE DATEPART(w,[date_created]) NOT IN (6,7)
      

      如果星期一是您服务器一周的第一天

      如果您有任何问题,请发表评论:-)

      【讨论】:

      • 可以自动处理DATEFIRST 的任何可能设置。详情见我的回答。
      【解决方案4】:

      在处理星期几计算时,请务必考虑当前的DATEFIRST 设置。此查询将始终正确排除周末,使用@@DATEFIRST 说明一周第一天的任何可能设置。

      SELECT *
      FROM your_table
      WHERE ((DATEPART(dw, date_created) + @@DATEFIRST) % 7) NOT IN (0, 1)
      

      【讨论】:

        【解决方案5】:
        SELECT date_created
        FROM your_table
        WHERE DATENAME(dw, date_created) NOT IN ('Saturday', 'Sunday')
        

        【讨论】:

        • 这可能有问题。运行这个脚本:set language italian; select DATENAME(WEEKDAY, '2015-01-01'); 结果是giovedì
        • 好点 HuBeZa,为了将这一天翻译成另一种语言,我将运行以下 SELECT * FROM sys.syslanguages 并查找您希望翻译成的语言
        【解决方案6】:

        将表格列中的休假工作日计算为默认值--更新

        如果您使用的是 SQL,这里的查询可以帮助您:http://gallery.technet.microsoft.com/Calculate...

        【讨论】:

          【解决方案7】:

          试试这个代码

          select (DATEDIFF(DD,'2014-08-01','2014-08-14')+1)- (DATEDIFF(WK,'2014-08-01','2014-08-14')* 2)
          

          【讨论】:

            最近更新 更多