使用Between进行SQL查询日期搜索



我刚刚运行了这个查询

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.0002012-09-25 13:00:00.000之间选择值

最新更新