选择查询工作异常

时间:2014-04-16 07:00:11

标签: sql sql-server sql-server-2008 tsql sql-server-2012

我对sql中datetime数据的逻辑运算符的性质感到困惑。

在我的数据库表中,RecordDateTime保存为:

2014-04-09 15:28:32.000

我正在检索此查询:

select 
    * 
from [GPSDB].[dbo].[Coordinates] 
where IMEI= '354400055967495' 
    and RecordedDateTime >= '2014-04-09 15:28:32.000' 
    and RecordedDateTime <= '2014-04-09 15:39:20.000'

现在它返回4行,这些行落在这两个日期范围之间或者与预期相同,但是当我从第一个日期删除Seconds部分然后仍然可以工作并返回相同的结果集时,就会出现混淆,即

select 
    * 
from [GPSDB].[dbo].[Coordinates] 
where IMEI = '354400055967495'
    and RecordedDateTime >= '2014-04-09 15:28' 
    and RecordedDateTime <= '2014-04-09 15:39:20.000'

但如果我从第二个日期删除秒部分,那么它只返回一行,并提供第一个日期的匹配时间。奇怪的 ? :/

请帮助。

1 个答案:

答案 0 :(得分:0)

日期时间数据2014-04-09 15:28:32.000包含两部分日期部分2014-04-09和时间部分15:28:32.000

所以当你说

RecordedDateTime >= '2014-04-09 15:28:32.000' and RecordedDateTime <= '2014-04-09 15:39:20.000'

它也将考虑时间部分,因为它之间有11分钟的差距;它将获取所有那些落在该范围内的记录。

但是当你在下面说时,它只考虑日期部分进行比较而且只有1天,因此它将获取该日期的第一条记录2014-04-09

RecordedDateTime >= '2014-04-09' 
and RecordedDateTime <= '2014-04-09'