加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 检查日期范围是否有周末

发布时间:2020-12-12 06:28:45 所属栏目:MsSql教程 来源:网络整理
导读:如果我有2个日期,我知道我可以使用datediff计算两个日期之间的天数,小时数,分钟数等,例如: declare @start datetime;set @start = '2013-06-14';declare @end datetime;set @end = '2013-06-15';select datediff( hour,@start,@end ); 如何确定日期范围是否
如果我有2个日期,我知道我可以使用datediff计算两个日期之间的天数,小时数,分钟数等,例如:
declare @start datetime;
set @start = '2013-06-14';

declare @end datetime;
set @end = '2013-06-15';

select datediff( hour,@start,@end );

如何确定日期范围是否包含周末?

我想知道日期范围是否包含周末的原因是因为我想从日或小时数中减去周末.即如果开始日是星期五,结束日期是星期一,我应该只有1天或24小时.

Datepart 1 = Sunday,而datepart 7 = Saturday在我的服务器上.

解决方法

我有一个函数来计算两个日期之间的工作日,基本查询是
declare @start datetime;
set @start = '2013-06-14';

declare @end datetime;
set @end = '2013-06-17';
SELECT 
   (DATEDIFF(dd,@Start,@end) +1)  -- total number of days (inclusive)
  -(DATEDIFF(wk,@end) * 2) -- number of complete weekends in period
  -- remove partial weekend days,ie if starts on sunday or ends on saturday
  -(CASE WHEN DATENAME(dw,@Start) = 'Sunday' THEN 1 ELSE 0 END) 
  -(CASE WHEN DATENAME(dw,@end) = 'Saturday' THEN 1 ELSE 0 END)

因此,如果日期包括周末,如果工作日与日期不同,则可以计算出来

SELECT case when  (DATEDIFF(dd,@end) +1) <>
   (DATEDIFF(dd,@end) = 'Saturday' THEN 1 ELSE 0 END) then 'Yes' else 'No' end as IncludesWeekends

或者更简单

SELECT   (DATEDIFF(wk,@end) * 2) +(CASE WHEN DATENAME(dw,@Start) = 'Sunday' THEN 1 ELSE 0 END)      +(CASE WHEN DATENAME(dw,@end) = 'Saturday' THEN 1 ELSE 0 END)  as weekendDays

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读