我究竟做错了什么?我有一个查询来获取两个日期之间的数据,但它没有得到最后的日期.
我试过了
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)
但为什么我需要额外增加一天?
大概你的列(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).
| 归档时间: |
|
| 查看次数: |
572 次 |
| 最近记录: |