SQL Server:在两个日期之间获取记录?

Ssa*_*har 17 sql-server datetime date-range

在SQL中,我编写了一个SELECT语句,用于在两个日期之间获取数据between and

例如:

select * 
from xxx 
where dates between '2012-10-26' and '2012-10-27'
Run Code Online (Sandbox Code Playgroud)

但返回的行仅为第26行,而不是第26和第27行.

你能帮助我吗?谢谢.

ype*_*eᵀᴹ 14

正如其他人已经回答的那样,您可能有一个DATETIME(或其他变体)列而不是DATE数据类型.

这是适用于所有人的条件,包括DATE:

SELECT * 
FROM xxx 
WHERE dates >= '20121026' 
  AND dates <  '20121028'    --- one day after 
                             --- it is converted to '2012-10-28 00:00:00.000'
 ;
Run Code Online (Sandbox Code Playgroud)

@Aaron Bertrand在博客中写道:魔鬼有什么BETWEEN共同之处?

  • 指向Aaron Bertrand博客的链接非常有用,因为它解释了为什么在日期时间列上使用BETWEEN查询时为什么要提出问题。我很久以前就学会了总是说'在'1/1/2016 00:00:00'和1/31/2016 23:59:59'之间而不是'在'1/1/2016'和1/31 /之间2016年``,但从未探索其原因。 (2认同)

Ode*_*ded 12

您需要更明确地添加开始和结束时间,直到毫秒:

select * 
from xxx 
where dates between '2012-10-26 00:00:00.000' and '2012-10-27 23:59:59.997'
Run Code Online (Sandbox Code Playgroud)

数据库可以很好地解释'2012-10-27''2012-10-27 00:00:00.000'.

  • *给予足够的眼球,所有问题都变浅...... ...... :-) (2认同)
  • @RichardTheKiwi:是的 - Oded最初有`... 23:59:59.999`适用于`DATETIME2`(但不适用于`DATETIME`) (2认同)