0

我有一个具有时间戳列的表,如下所示

ID            timeStamp    var1    var2    var3
1   05-09-2013 18:23:56     0       1       1
2   05-09-2013 18:23:57     0       0       1
3   05-09-2013 18:23:58     1       0       1
4   05-09-2013 18:23:59     1       0       1

我想根据时间戳检索时间戳>05-09-2013 18:23:56 和时间戳 <05-09-2013 18:23:59

我正在尝试这些方法

select * from test where timeStamp<'05-09-2013 18:23:59' and timeStamp>'05-09-2013 18:23:57'

它给出空行。我尝试使用between关键字仍然没有得到想要的结果。

SELECT     *  FROM            test
WHERE        (timeStamp BETWEEN '05-09-2013 18:23:57' AND '05-09-2013 18:23:59')

我可以知道我在这里做错了什么吗?这是屏幕截图

在此处输入图像描述

此屏幕截图没有where子句 在此处输入图像描述

此屏幕截图显示了表格说明 在此处输入图像描述

4

1 回答 1

1

使用不会破坏查询的适当日期时间文字。更多和详细的解释坏习惯踢:错误处理日期/范围查询

SELECT  *  
FROM    test
WHERE   ( timeStamp BETWEEN '2013-09-05T18:23:57' AND '2013-09-05T18:23:59' ) ;

另请注意,上面带有时间部分的时间戳18:23:59.000,like'18:23:59.100'不会包含在结果中,因为上述条件相当于:

WHERE   timeStamp >= '2013-09-05T18:23:57.000' 
  AND   timeStamp <= '2013-09-05T18:23:59.000'

所以,你可能想要这个:

SELECT  *  
FROM    test
WHERE   timeStamp >= '2013-09-05T18:23:57.000' 
  AND   timeStamp <  '2013-09-05T18:24:00.000'

出于这个原因,不建议使用BETWEENin 日期和日期时间比较。请参阅@Aaron Bertrand 的另一篇博文:BETWEEN 和魔鬼有什么共同点?

于 2013-09-16T09:35:34.860 回答