gpt4 book ai didi

sql - 如何检测 SQL 中两个日期时间之间的重叠?

转载 作者:行者123 更新时间:2023-12-03 02:27:57 24 4
gpt4 key购买 nike

我有一个如下表:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com