我正在尝试编写查询,以查看工程师是否在约定的时间段内访问了他的工作。
Table Screenshot http://img24.imageshack.us/img24/1156/capturebcn.jpg
这是我目前的查询:
SELECT
v.[VISITDATE],
CONVERT(VARCHAR, v.[STARTTIME], 105) AS 'Startdate',
CONVERT(VARCHAR, v.[STARTTIME], 108) AS 'StartTime',
CONVERT(VARCHAR, v.[bookeddate], 105) AS 'BookedDate',
CONVERT(VARCHAR, t.[starttime], 108) AS 'TimeSlotStart',
CONVERT(VARCHAR, t.[endtime], 108) AS 'TimeSlotEnd',
v.[Status]
FROM
[tbl_repair_visit] v
INNER JOIN [ltbl_TimeSlots] t ON v.timeslot = t.[Slot]
'StartDate'
和'StartTime'
是工程师去过的日期和时间。
'BookedDate'
是他应该离开的日期,'TimeSlotStart'
和'TimeSlotEnd'
定义了他应该开始工作的时间跨度。所以我需要一个True / False值的列来说明他是否进入了正确的时间。
答案 0 :(得分:5)
SELECT
CASE
WHEN StartDate = BookedDate AND StartTime BETWEEN TimeSlotStart and TimeSlotEnd
THEN 'True'
ELSE 'False'
END
FROM
...
答案 1 :(得分:0)
为什么不简单:
WHERE Startdate = BookedDate AND StartTime <= TimeSlotEnd AND StartTime >= TimeSlotStart