两个日期之间的Sql Server where子句不给出预期的输出

时间:2013-05-24 09:11:29

标签: sql-server-2008 datetime

这是我使用'between'运算符来获取日期的简单查询。

create table dummy (mydate datetime);
 insert into dummy values('2013-03-20 10:30:00.000');
 insert into dummy values('2013-03-21 10:30:00.000');
 insert into dummy values('2013-03-22 10:30:00.000');
 insert into dummy values('2013-03-23 10:30:00.000');
 insert into dummy values('2013-03-24 10:30:00.000');
 insert into dummy values('2013-03-25 10:30:00.000');
 insert into dummy values('2013-03-26 10:30:00.000');
 insert into dummy values('2013-03-27 10:30:00.000');
 insert into dummy values('2013-03-28 10:30:00.000');
 insert into dummy values('2013-03-29 10:30:00.000');
 insert into dummy values('2013-03-30 10:30:00.000');

我使用的qiuery是: select * from dummy where mydate between ('3/01/2013 12:00:00 AM') and ('3/30/2013 12:00:00 AM')

此处2013-03-30 10:30:00.000也应该返回。

SQL FIDDLE

4 个答案:

答案 0 :(得分:14)

更改where子句中的日期时间格式,然后使用>=<检查值。

select * 
from dummy 
where mydate >= '20130301' and
      mydate < '20130401'

答案 1 :(得分:3)

查询:

<强> SQLFIDDLEExample

select * 
from dummy 
where mydate between ('3/01/2013 12:00:00') 
and ('3/30/2013 12:00:00')

结果:

|                       MYDATE |
--------------------------------
| March, 20 2013 10:30:00+0000 |
| March, 21 2013 10:30:00+0000 |
| March, 22 2013 10:30:00+0000 |
| March, 23 2013 10:30:00+0000 |
| March, 24 2013 10:30:00+0000 |
| March, 25 2013 10:30:00+0000 |
| March, 26 2013 10:30:00+0000 |
| March, 27 2013 10:30:00+0000 |
| March, 28 2013 10:30:00+0000 |
| March, 29 2013 10:30:00+0000 |
| March, 30 2013 10:30:00+0000 |

答案 2 :(得分:2)

我认为(我的文化没有AM/PM指示符)12 AM表示午夜(因此从29日到30日)。因此,请使用12 PM或省略AM/PM指示符。

mydate between ('3/01/2013 12:00:00 AM') 
and ('3/30/2013 12:00:00 PM')

Demo

你也可以删除时间部分并添加一天,这意味着午夜:

mydate between '2013-03-01' and '2013-03-31'

Demo

答案 3 :(得分:0)

请记住,日期时间数据使用24小时制(00:00:00至23:59:59)。 错误是在“3/30/2013 12:00:00 AM”条件下的“AM”指定,因为12:00:00 AM等于00:00:00,而10:30:00是“大于“上午12:00:00,这就是为什么值'2013-03-30 10:30:00.000'它不在选定的值中。

使用     选择 *     来自假人     在哪里mydate之间     ('3/01/2013 12:00:00')     和     ('3/30/2013 12:00:00')