代码之家  ›  专栏  ›  技术社区  ›  jitbit

如何在SQL Server查询中排除周末?

  •  54
  • jitbit  · 技术社区  · 16 年前

    如何排除 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
    

    谢谢!

    7 回复  |  直到 10 年前
        1
  •  111
  •   LukeH    16 年前

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

    SELECT *
    FROM your_table
    WHERE ((DATEPART(dw, date_created) + @@DATEFIRST) % 7) NOT IN (0, 1)
    
        2
  •  17
  •   kevchadders    16 年前
    SELECT date_created
    FROM your_table
    WHERE DATENAME(dw, date_created) NOT IN ('Saturday', 'Sunday')
    
        3
  •  11
  •   gkrogers    16 年前

    假设您使用的是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

        4
  •  8
  •   jitbit    16 年前

    试试 DATENAME() 功能:

    select [date_created]
    from table
    where DATENAME(WEEKDAY, [date_created]) <> 'Saturday'
      and DATENAME(WEEKDAY, [date_created]) <> 'Sunday'
    
        5
  •  2
  •   Gausie    16 年前

    答案取决于服务器的周启动设置,因此

    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)
    

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

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

        6
  •  1
  •   Joseph Daigle Sarabpreet Singh Anand    13 年前

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

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

        7
  •  -1
  •   Tanmay Nehete    12 年前

    试试这个代码

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