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

标签 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

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

2012-09-25 13:00:00.000

知道为什么选择这张唱片吗?即使 Between 包含给定值,该值也高于条件。我使用的是 SQL Server 2012 Express 版本。

最佳答案

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

查询:

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

关于SQL 查询使用 Between 进行日期搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18095097/

相关文章:

sql - 批量脚本执行

sql-server - 未考虑数据库大小

sql - SQL Server 2012 中的自动计算列

sql - 使用局部变量设置 NOCOUNT 状态

SQL Server - 多个模式中的同一个表

sql - IN() 子句中的 PostgreSQL ORDER BY 值

sql - 强制具有不同派生值的重复行

java - JOOQ:一次性删除记录列表?

sql - 聚合表 2 中的行以避免重复表 1 中的行

sql-server - 使用正则表达式(或类似的)更新字段