我有一个语句设置如下:
SELECT *
FROM Events
WHERE CAST('6/6/2013 10:14:30 PM' AS DATETIME) < EventTime
现在,它返回每个事件,包括当时发生的事件,这意味着我必须在查询后处理这些事件。有没有办法设置这个查询,使它只返回EventTime
大于给定字符串日期时间的事件?
基本上,<
运营商似乎被视为<=
,我不想要这个。
我有一个语句设置如下:
SELECT *
FROM Events
WHERE CAST('6/6/2013 10:14:30 PM' AS DATETIME) < EventTime
现在,它返回每个事件,包括当时发生的事件,这意味着我必须在查询后处理这些事件。有没有办法设置这个查询,使它只返回EventTime
大于给定字符串日期时间的事件?
基本上,<
运营商似乎被视为<=
,我不想要这个。
您可以使用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
首先,您的字符串日期类型不明确:您要么需要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
我怀疑您想要2013/6/6 10:14:31
返回超过 1 秒的边界。