我有一个如下表:
EmpId DateTimeIn DateTimeOut Effort
1030 2016-12-01 07:30:00.000 2016-12-01 12:30:00.000 1030
1030 2016-12-01 13:30:00.000 2016-12-01 16:30:00.000 1531
员工 1030
已在 2016 年 12 月 1 日的 07:30 至 12:30 和 13:30 至 16:30 时间范围内插入了自己的努力。
此后,他不应在这些时间范围内投入精力。他可以在 2016 年 12 月 1 日的 07:30 或 12:30 之前至 13:30 或 16:30 之后参加比赛,也可以在任何其他日期参加。
为了实现此目的,我编写了一个以下查询,但它总是抛出错误并且不允许用户插入数据。请帮忙。
IF EXISTS (SELECT 1 FROM TimesheetEntries
WHERE EmpId = @EmpId AND (@DateTimeIn >= DateTimeIn AND @DateTimeIn < DateTimeOut)
OR (@DateTimeOut >= DateTimeOut AND @DateTimeOut < DateTimeIn))
BEGIN
RAISERROR ('You already input your effort for the given time range.',16,1)
RETURN
END
最佳答案
看起来像是一个括号问题 - 您没有将 OR
的两个部分与 EmpId = @EmpId
进行 AND
操作。看起来逻辑也有点错误(您检查 @DateTimeOut
晚于 DateTimeOut
且早于 DateTimeIn
,如果 DateTimeOut > DateTimeIn
正如我们所期望的,永远不会满足)。
尝试:
IF EXISTS
(
SELECT 1
FROM TimesheetEntries
WHERE EmpId = @EmpId
AND ((@DateTimeIn >= DateTimeIn AND @DateTimeIn <= DateTimeOut) OR (@DateTimeOut >= DateTimeIn AND @DateTimeOut <= DateTimeOut))
)
BEGIN
RAISERROR ('You already input your effort for the given time range.',16,1)
RETURN
END
关于sql - 如何检测 SQL 中两个日期时间之间的重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41259325/