3

我有一个语句设置如下:

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

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

基本上,<运营商似乎被视为<=,我不想要这个。

4

2 回答 2

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
于 2013-06-26T22:43:24.470 回答
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

我怀疑您想要2013/6/6 10:14:31返回超过 1 秒的边界。

于 2013-06-26T22:33:21.173 回答