如何比较SQL中的日期时间以排除相同的日期?

时间:2013-06-26 22:15:50

标签: sql sql-server

我的声明设置如下:

SELECT *
FROM Events
WHERE CAST('6/6/2013 10:14:30 PM' AS DATETIME) < EventTime

现在,它返回包括那时发生的每个事件,这意味着我必须在查询之后处理事件。有没有办法设置此查询,以便它只返回EventTime大于给定字符串日期时间的事件?

基本上,<运算符似乎被视为<=,我不希望这样。

2 个答案:

答案 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 2013YYYY/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