如何在 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 查询中排除周末?的主要内容,如果未能解决你的问题,请参考以下文章