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

And*_*rew 59 t-sql sql-server date weekend

如何排除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
Run Code Online (Sandbox Code Playgroud)

这是我正在寻找的结果:

date_created
'2009-11-26 09:00:00'  -- Thursday
'2009-11-27 09:00:00'  -- Friday
'2009-11-30 09:00:00'  -- Monday
Run Code Online (Sandbox Code Playgroud)

谢谢!

Luk*_*keH 117

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

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

  • 不错的精致:+1!:-) (2认同)

kev*_*ers 18

SELECT date_created
FROM your_table
WHERE DATENAME(dw, date_created) NOT IN ('Saturday', 'Sunday')
Run Code Online (Sandbox Code Playgroud)

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

gkr*_*ers 11

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

SELECT date_created
FROM your_table
WHERE DATEPART(dw, date_created) NOT IN (1, 7);
Run Code Online (Sandbox Code Playgroud)

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


And*_*rew 8

试试这个DATENAME()功能:

select [date_created]
from table
where DATENAME(WEEKDAY, [date_created]) <> 'Saturday'
  and DATENAME(WEEKDAY, [date_created]) <> 'Sunday'
Run Code Online (Sandbox Code Playgroud)