【发布时间】:2014-09-11 22:46:47
【问题描述】:
我有一个日历,用户可以在其中创建约会,我不希望重复预订,也不希望预订相互重叠。
我认为要实现这一点,以下逻辑可以解决问题。
在以下情况下不允许预订:
@StartDateRequested = Appointments.EndDate @StartDateRequested >= Appointments.StartDate AND EndDateRequested
这应该停止在另一个预订开始和结束内的预订,并停止在之前和之后开始的预订。
这是我尝试过的:
DECLARE @ScheduledStart datetime2
SET @ScheduledStart = '2014/07/21 11:00:00 PM'
DECLARE @ScheduledEnd datetime2
SET @ScheduledEnd = '2014/07/21 13:55:00 PM'
DECLARE
@ErrorMessage varchar(128)
,@IsLocalTrans bit
DECLARE @Count int
SELECT
--@Count = COUNT(*)
A.AppointmentId
FROM
Appointment AS A WITH (NOLOCK)
WHERE
(
-- (@ScheduledStart BETWEEN A.ScheduledStart AND A.ScheduledEnd)
--OR
-- (@ScheduledEnd BETWEEN A.ScheduledStart AND A.ScheduledEnd)
--OR
(@ScheduledStart < A.ScheduledStart AND @ScheduledEnd > A.ScheduledEnd)
OR
(@ScheduledStart > A.ScheduledStart AND @ScheduledEnd < A.ScheduledEnd)
)
AND A.AppointmentStatusId = 2 --confirmed
这失败了,它返回了 3 个约会,它们的开始和结束时间都大于我尝试的日期的开始和结束时间。
注释掉的代码可用于在另一个预订时段开始或结束时停止预订,但不适合重叠的预订。
我认为我在正确的轨道上,只是我的 sql 日期时间逻辑关闭了。
在我的数据库中,我有一个从 12:00 到 12:55 开始的约会,您将在我的测试值中看到我正在尝试检查是否可以创建一个 11:00 到 13:55 的约会,这个不应该让我这样做。
【问题讨论】: