Kaj*_*ama 3 t-sql date-range date-difference
我正在寻找解决方案,如何选择两个日期之间没有周末和公众假期的天数。
到目前为止,我有这个:
SELECT evnt.event_id,
evnt.date_from,
evnt.date_to,
DATEDIFF(DD, evnt.date_from, evnt.date_to)
- (DATEDIFF(WK, evnt.date_from, evnt.date_to) * 2)
- CASE WHEN DATEPART(DW, evnt.date_from) = 1 THEN 1 ELSE 0 END
+ CASE WHEN DATEPART(DW, evnt.date_to) = 1 THEN 1 ELSE 0 END AS Date_Diff
--- COUNT(*) FROM public_holidays AS h WHERE h.date_from BETWEEN evnt.date_from AND evnt.date_to
FROM events AS evnt
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我取消注释部分:
- COUNT(*) FROM public_holidays AS h WHERE h.date_from BETWEEN evnt.date_from AND evnt.date_to
Run Code Online (Sandbox Code Playgroud)
我想要实现的是在日期范围内获得工作日数。问题出在最后一步,我试图从该范围中减去所有公共假日。
谁能在最后一步提供帮助?看来,我做错了,但我不知道该怎么办。
先感谢您
小智 5
尝试这个:
SELECT evnt.event_id,
evnt.date_from,
evnt.date_to,
DATEDIFF(DD, evnt.date_from, evnt.date_to)
- (DATEDIFF(WK, evnt.date_from, evnt.date_to) * 2)
- CASE WHEN DATEPART(DW, evnt.date_from) = 1 THEN 1 ELSE 0 END
+ CASE WHEN DATEPART(DW, evnt.date_to) = 1 THEN 1 ELSE 0 END AS Date_Diff
- (SELECT COUNT(*) FROM public_holidays AS h WHERE h.date_from BETWEEN evnt.date_from AND evnt.date_to)
FROM events AS evnt
Run Code Online (Sandbox Code Playgroud)
取消注释应该是一个子查询
--- COUNT(*) FROM public_holidays AS h WHERE h.date_from BETWEEN evnt.date_from AND evnt.date_to
Run Code Online (Sandbox Code Playgroud)
像这样:
- (SELECT COUNT(*) FROM public_holidays AS h WHERE h.date_from BETWEEN evnt.date_from AND evnt.date_to)
Run Code Online (Sandbox Code Playgroud)