我的声明设置如下:
SELECT *
FROM Events
WHERE CAST('6/6/2013 10:14:30 PM' AS DATETIME) < EventTime
现在,它返回包括那时发生的每个事件,这意味着我必须在查询之后处理事件。有没有办法设置此查询,以便它只返回EventTime
大于给定字符串日期时间的事件?
基本上,<
运算符似乎被视为<=
,我不希望这样。
答案 0 :(得分:1)
你可以使用sql server的DATEDIFF功能,如:
SELECT *
FROM Events
WHERE DATEDIFF(Second, Cast('6/6/2013 10:14:30 PM' AS DATETIME) , @EventTime) < 0
--^^ this can be changed to what ever accuracy you want
答案 1 :(得分:0)
首先,您的字符串日期类型是不明确的:您需要使用6 JUN 2013
作为日期部分,或者JUN 6 2013
或YYYY/MM/DD HH:NN:SS
实际上需要使用毫秒。
您可能无法在EventTime
上充分利用索引,具体取决于SQL的版本:EventTime > CAST('6/6/2013 10:14:30 PM' AS DATETIME)
的评估方式与CAST('6/6/2013 10:14:30 PM' AS DATETIME) < EventTime
如果EventTime
评估为2013/6/6 10:14:30.001
,那么SQL正常运行。您可能希望使用DATEDIFF(Seconds, EventTime, '2013/6/6 10:14:30') > 0
(可能小于),这将评估交叉边界的数量。参考:http://msdn.microsoft.com/en-us/library/ms189794.aspx
我怀疑你想要返回超过1秒边界的2013/6/6 10:14:31
。