SQL Server:没有得到查询之间的最后日期

Jah*_*Jah 2 sql sql-server

我究竟做错了什么?我有一个查询来获取两个日期之间的数据,但它没有得到最后的日期.

我试过了

select * 
from data
where dates between '2016-01-01' and '2016-01-02' 
Run Code Online (Sandbox Code Playgroud)

select * 
from data
where dates >= '2016-01-01' and dates <= '2016-01-02'
Run Code Online (Sandbox Code Playgroud)

我需要SQL Server在2016-01-01和2016-01-02之间返回数据

输出应该是

pid     name        date
-------------------------------
1       test2       2016-01-02
2       test2       2016-01-01
3       test3       2016-01-02
Run Code Online (Sandbox Code Playgroud)

这有效

select * 
from data
where dates >= '2016-01-01' and dates <= '2016-01-03'
Run Code Online (Sandbox Code Playgroud)

但为什么我需要额外增加一天?

Gor*_*off 7

大概你的列(mis)命名dates有一个时间组件.这应该适合你想要的:

select *
from data
where dates >= '2016-01-01' and dates < '2016-01-03';
Run Code Online (Sandbox Code Playgroud)

SQL Server大师Aaron Bertrand在这个主题上有一篇很棒的博客文章,有 什么BETWEEN与魔鬼有共同之处?.这是一个很好的起点.

或者,您可以将查询编写为:

select *
from data
where cast(dates as date) >= '2016-01-01' and dates <= '2016-01-02';
Run Code Online (Sandbox Code Playgroud)

删除时间组件后,比较将起作用.但是,我不愿意在列上使用函数,因为这可能会妨碍在查询中使用索引(SQL Server会将转换为异常date).