如果我有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在我的服务器上 .
6 回答
我有一个函数来计算两个日期之间的工作日,基本查询是
因此,如果日期包括周末,如果工作日与日期不同,则可以计算出来
或者更简单
如果满足以下三个条件中的任何一个条件,那么您将有一个周末:
结束日期的星期几(以整数形式)小于开始日期的星期几
任何一天本身都是周末
该范围至少包括六天
.
一种方法,只是向您展示如何使用数字表格
返回两个日期之间所有周末的示例
结果
您可以使用以下功能 . 如果它在周末开始,则第一个将给定的开始或结束时间移动到星期一(周五,如果倒退) . 第二个计算没有周末的两个日期之间的秒数 . 然后你只需要检查总天数是否等于没有weksends的天数(下面的演示) .
然后你可以这样得到信息:
这是 demo :http://sqlfiddle.com/#!6/7cda7/11
这是简单和通用的查询 . 你可以通过递归查询来实现结果 . 检查以下查询
它一定会对你有用 .
您可以使用递归CTE来获取范围之间的日期
然后使用..过滤掉周末