【发布时间】:2014-01-10 14:29:50
【问题描述】:
--我想在 TIME 数据类型上使用 SQL - BETWEEN。
我想执行下面的查询,但它没有给出正确的结果。
在这里,starttime 和 endtime 两个字段都是 typeof smalldatetime ,因为我只需要时间比较并且日期的值不是实际的,它只是虚拟的,因此我将其转换为 TIME 字段。
SELECT
count(1)
FROM
t1 INNER JOIN t2
WHERE
CAST(t1.StartTime as TIME)
BETWEEN CAST(t2.StartTime as TIME)
AND CAST(t2.EndTime as TIME)
CAST(t1.StartTime as TIME) is 08:00:00.0000000
CAST(t2.StartTime as TIME) is 07:00:00.0000000
CAST(t2.StartTime as TIME) is 12:00:00.0000000
所以,上面的查询结果应该是记录计数 1(因为 8 点钟在 7 到 12 之间)。但它返回 null。
请告诉我这里有什么问题以及如何纠正。
谢谢
【问题讨论】:
-
您能否提供示例数据和结果以便我们查看问题?
-
你的意思是 SELECT COUNT(*) 吗?
-
在处理像时间这样的连续数据时,通常最好使用半开区间,例如
>= start time AND < end time而不是使用BETWEEN。它往往会导致更自然的查询(例如,如果您运行一个关于早上的查询,然后是一个关于下午的查询,您倾向于希望恰好在中午发生的事件只出现在其中一个查询的结果中,而不是比两者都)
标签: sql sql-server database sql-server-2008 between