这里有一张表格。我需要一个查询来返回指定时间的班次id。
我该如何获取这个值?
shift_ID shift_From shift_To
1 2010-09-21 10:00:00.000 2010-09-21 18:10:00.000
2 2010-09-21 20:00:00.000 2010-09-21 05:00:00.000
假设我输入的是02:00:00,我需要得到班次ID为1。我该怎么做?
这里有一张表格。我需要一个查询来返回指定时间的班次id。
我该如何获取这个值?
shift_ID shift_From shift_To
1 2010-09-21 10:00:00.000 2010-09-21 18:10:00.000
2 2010-09-21 20:00:00.000 2010-09-21 05:00:00.000
尝试:
SELECT shift_ID
FROM time_shift
WHERE
DATEDIFF(hour, shift_From, shift_To) = 2 -- your input
了解更多关于MSDN上的DATEDIFF
第一个参数是您要指定给DATEDIFF的时间部分(小时,分钟,秒)。
如果您的输入严格类似于02:00:00
,则需要解析它以确定将其指定为第一个参数。
要确定指定的日期是否属于其他两个日期之间,请使用:
SELECT shift_ID
FROM time_shift
WHERE
CAST(shift_From AS TIME) < CAST(@input AS TIME)
AND
CAST(@input AS TIME) < CAST(shift_To AS TIME)
-- you can specify operators inclusiveness, i.e. <= >= etc
-- or
CAST(@input AS TIME) BETWEEN (CAST(shift_From AS TIME), CAST(shift_To AS TIME))
了解有关MSDN上的时间的更多信息。
BETWEEN
在 TIME
上的表现很奇怪:SELECT CASE WHEN CAST('02:00:00' AS TIME) BETWEEN CAST('10:00:00.000' AS TIME) AND CAST('18:10:00.000' AS TIME) THEN 1 ELSE 0 END
返回 0。 - abatishchev02:00:00
(凌晨2点)不在上午10点到下午6点之间是可以的,因为它确实不在之间:) 所以你不应该使用BETWEEN
。我认为你应该使用DATEDIFF
。 - abatishchev