我刚刚运行了这个查询
Select *
from ProjectData
where logtime between '2012-09-25 12:00:00.000' and '2012-09-25 12:59:59.999'
order by LogTime
为了找到12小时的全部记录,我们每秒都有记录,所以我本以为会有3600个记录,但令我惊讶的是,我得到了3601个记录,最后一个记录时间是
2012-09-25 13:00:00.000
知道为什么要选这张唱片吗?即使Between
包括给定的值,该值也高于条件。我使用的是SQL Server 2012 Express版本。
尝试将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
输出:
logtime
---------------------------
2012-09-25 12:00:00.0000000
2012-09-25 12:59:59.9990000
DATETIME与DATETIME2:
SELECT name, [precision]
FROM sys.types
WHERE name IN ('datetime', 'datetime2')
输出:
name precision
----------- ---------
datetime2 27
datetime 23
您已经将Datetime
作为数据类型,并且它具有四舍五入的特性
Datetime
值四舍五入为.000、.003或.007秒的增量。此处的详细信息
例如:
SQL Fiddle
MS SQL Server 2012架构设置:
查询1:
Declare @testtime datetime = '2012-09-25 12:59:59.999'
select @testtime
结果:
| COLUMN_0 |
------------------------------------
| September, 25 2012 13:00:00+0000 |
尝试执行此查询
SELECT CAST('2012-09-25 12:59:59.999' AS DATETIME)
这将输出2012-09-25 13:00:00.000
。所以我认为这就是为什么你的结果包含时间为2012-09-25 13:00:00.000
的记录。
所以实际上它在2012-09-25 12:00:00.000
和2012-09-25 13:00:00.000
之间选择值