使用Between之间的SQL查询日期搜索

Sum*_*pta 7 sql sql-server sql-server-2012-express

我只是运行此查询

Select * 
from ProjectData 
where logtime between '2012-09-25 12:00:00.000' and '2012-09-25 12:59:59.999' 
order by LogTime
Run Code Online (Sandbox Code Playgroud)

为了找到12小时的所有记录,我们每秒都有记录,所以我期待3600记录,但令我惊讶的是我得到了3601记录,最后的记录时间是

2012-09-25 13:00:00.000
Run Code Online (Sandbox Code Playgroud)

知道为什么选择此记录?即使Between包含给定值,该值也高于条件.我正在使用SQL Server 2012 Express版.

Dev*_*art 9

尝试使用DATETIME2数据类型logtime列 -

查询:

DECLARE @temp TABLE (logtime DATETIME2)
INSERT INTO @temp (logtime)
VALUES 
    ('20120925 12:00:00.000'),
    ('20120925 12:59:59.999'),
    ('20120925 13:00:00.000')

SELECT *
FROM @temp
WHERE logtime BETWEEN '2012-09-25 12:00:00.000' AND '2012-09-25 12:59:59.999'
ORDER BY logtime
Run Code Online (Sandbox Code Playgroud)

输出:

logtime
---------------------------
2012-09-25 12:00:00.0000000
2012-09-25 12:59:59.9990000
Run Code Online (Sandbox Code Playgroud)

DATETIME与DATETIME2:

SELECT name, [precision]
FROM sys.types
WHERE name IN ('datetime', 'datetime2')
Run Code Online (Sandbox Code Playgroud)

输出:

name        precision
----------- ---------
datetime2   27
datetime    23
Run Code Online (Sandbox Code Playgroud)

  • `DATETIME2`对我来说是一个新信息.谢谢Devart +1 (3认同)
  • @Ravi Singh,每个数据类型都有精度限制.`DATETIME`具有较低的精度,因此服务器被强制使用舍入毫秒. (3认同)