【发布时间】:2016-02-05 04:44:11
【问题描述】:
我们正在为员工假期制作日期范围选择器
例如,我将以 2016 年 1 月为例,我们的系统从星期日到星期六
如果员工在 1 月 14 日至 20 日休假,他们应该在 10-16 日和 17-23 日的日期范围内
我只是想不出如何编写一个将其限制为这两个日期的 sql 查询。
我拥有的是:
DECLARE @WeekRangeStart DATETIME ='2016/01/10';
DECLARE @WeekRangeEnd DATETIME = '2016/01/16';
SELECT [ID],
[EmpName],
[EmpType]
FROM Vacations
WHERE VacationStartDate >= @WeekRangeStart OR VacationEndDate >= @WeekRangeStart
--OUTPUT
--ALL DAYS BEFORE THIS WOULD BE TRUE...
--1/14/2016 >= 1/10/2016 TRUE
--1/20/2016 >= 1/10/2016 TRUE
-- NEXT WEEK
--1/14/2016 >= 1/17/2016 FALSE
--1/20/2016 >= 1/17/2016 TRUE
-- NEXT WEEK
--1/14/2016 >= 1/24/2016 FALSE
--1/20/2016 >= 1/24/2016 FALSE
--ALL DAYS AFTER THIS DAY WOULD BE FALSE...
但这仅适用于已经过去的事情,但是如果我要在三月预订一天,我总是会显示在时间表上,因为我的开始日期会比今天大。我应该如何将其限制在该范围内?
【问题讨论】:
-
很确定 DATEPART() 函数就是您需要的。
-
您在 WHERE 子句中的范围重叠逻辑不正确。看看这个问题:stackoverflow.com/questions/325933/…
标签: sql-server tsql