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

Posted

技术标签:

【中文标题】如何在 SQL Server 查询中排除周末?【英文标题】:How do I exclude Weekend days in a SQL Server query? 【发布时间】:2010-12-20 17:05:42 【问题描述】:

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

谢谢!

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于如何在 SQL Server 查询中排除周末?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 查询排除周末和下午 6 点到晚上 9 点

SQL计算时间差并排除周末

SQL如何使用datediff排除数据并且不存在于同一个表中

访问 SQL 减去日期,不包括周末

如何在 SQL 中每年在特定日期范围之间排除

sql 2008 查询排除 某一列的数据