如何从具有时间戳列的DB表中检索

时间:2013-09-13 05:37:16

标签: sql sql-server sql-server-2008 sql-server-2005

我有一张表格,其时间戳列如下

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')

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

enter image description here

此屏幕截图没有 where 子句 enter image description here

此屏幕截图显示表格描述 enter image description here

1 个答案:

答案 0 :(得分:1)

使用不会破坏查询的适当日期时间文字。 Bad habits to kick : mis-handling date / range queries

的更多详细解释
SELECT  *  
FROM    test
WHERE   ( timeStamp BETWEEN '2013-09-05T18:23:57' AND '2013-09-05T18:23:59' ) ;

另请注意,时间部分高于18:23:59.000的时间戳(如'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'

出于这个原因,不建议在日期和日期时间比较中使用BETWEEN。请参阅@Aaron Bertrand撰写的另一篇博文: What do BETWEEN and the devil have in common?