我需要计算 datediff <= 1 的所有订单。我使用 COALESCE 函数,因为有时 Date1 可能为空。
SELECT COUNT(*)
FROM Orders
WHERE DATEDIFF(dd,COALESCE(Date1, Date2),Date0) <= 1
有没有办法只计算工作日(周一至周五)?
谢谢。
最佳答案
您可以使用 Calendar表并将所有工作日存储在其中。
或者,您可以使用以下简单公式来计算两个日期之间的工作日数。该公式假设星期六和星期日不是工作日。它假设两个给定日期是工作日。
它所做的只是计算正常的天数差异,然后从每周开始的结果中减去 2(非营业)天。
示例 1
DECLARE @Date0 date = '2016-04-07'; -- Thursday
DECLARE @Date1 date = '2016-04-08'; -- Friday
SELECT
DATEDIFF(day, @Date0, @Date1) -
DATEDIFF(week, @Date0, @Date1) * 2 AS BusinessDays;
结果
BusinessDays
1
示例 2
DECLARE @Date0 date = '2016-04-08'; -- Friday
DECLARE @Date1 date = '2016-04-11'; -- Monday
SELECT
DATEDIFF(day, @Date0, @Date1) -
DATEDIFF(week, @Date0, @Date1) * 2 AS BusinessDays;
结果
BusinessDays
1
示例3
DECLARE @Date0 date = '2016-04-08'; -- Friday
DECLARE @Date1 date = '2016-04-18'; -- Monday
SELECT
DATEDIFF(day, @Date0, @Date1) -
DATEDIFF(week, @Date0, @Date1) * 2 AS BusinessDays;
结果
BusinessDays
6
您的查询将如下所示:
SELECT COUNT(*)
FROM Orders
WHERE
DATEDIFF(day, COALESCE(Date1, Date2), Date0) -
DATEDIFF(week, COALESCE(Date1, Date2), Date0) * 2 <= 1
;
关于SQL 日期差异工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36612414/