【发布时间】:2018-06-30 23:37:59
【问题描述】:
我在 google 搜索时发现了这个有用的查询:
SELECT
SUM((DATEDIFF(dd, vacFrom, vacTo) + 1)
-(DATEDIFF(wk, vacFrom, vacTo) * 2)
-(CASE WHEN DATENAME(dw, vacFrom)='Friday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, vacTo)='Friday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, vacFrom)='Saturday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, vacTo)='Saturday' THEN 1 ELSE 0 END))
FROM
MS_users_vacations
WHERE
YEAR(vacFrom) = 2018
它的用法例如:如果假期包括任何假期,则不包括周末,则获取员工一年的总假期天数,因此 vacFrom 是假期的开始日期vacTo 是结束日期。但是,如果周末是自定义的,如何获得相同的结果?我的意思是,如果我想对所有表记录的日期列(vacFrom、vacTo)之间的天数求和,但不包括工作日,例如:星期一和星期二或我将通过命令参数传递的任何其他日子?
【问题讨论】:
-
日期维度表(也称为日历维度,有时也称为时间维度)是可重复使用的,并且存在许多用于创建和填充它们的示例。一些更深思熟虑的案例包括填充美国和国际主要假期标志栏的案例陈述;当它们发生在工作日时非常有用。
-
您需要解释您要实现的逻辑,并提供示例数据和期望的结果。
标签: sql sql-server