SQL查询不会选择日期之间的所有行

时间:2015-04-24 08:27:50

标签: sql datetime ms-access

我的SQL查询没有选择我要求的所有行。它只考虑日期时间的日期部分;几个月没有得到任何关注。

这是我的疑问:

mActionMode = InstalacionesEncontradasMostradasEnMapaFragment.this.startActionMode(new ActionBarCallBack(marker));

这些日期没有结果,但日期更改为:

SELECT * 
FROM Reservations 
WHERE ReservationDate >= '24/04/2015' AND ReservationDate <= '24/03/2015'"

我得到2个结果SELECT * FROM Reservations WHERE ReservationDate >= '24/04/2015' AND ReservationDate <= '17/03/2015'"

顺便说一句,ReservationDate字段是字符串格式。即使它在DateTime上也是如此。

when ReservationDate= "17/04/2015 15:02:03" and "21/04/2015 16:05:56"

4 个答案:

答案 0 :(得分:4)

尝试使用between运算符作为日期

    select * from Reservations 
    where 
        ReservationDate  between '17/03/2015'
    and
        DATE_ADD('24/04/2015',INTERVAL 1 DAY) // or something like that

此外,在MySQL中,您可以使用DATE函数从日期时间中提取日期:

    select * from Reservations
    where 
         DATE(ReservationDate) BETWEEN '17/03/2015' AND '24/03/2015'

如果您使用的是MS Sql Server,则有some other个变通方法可以从字符串中获取日期。

<强>更新

由于@Netanelgo说他正在使用MS Access:

尝试CDate()将字符串转换为日期。

select  *  from Reservations
where CDate(date) between #17/03/2015# and #24/03/2015#;

如果因为CDate无法重新格式化而无效,则可以使用DateSerial(年,月,日)来构建日期。您将需要使用mid $和Cint()来构建年,月和日参数。对于格式为“yyyy-mm-dd”的这样的事情:

DateSerial(CInt(mid(date, 1, 4)), CInt(mid(date, 6, 2)), CInt(mid(date, 9, 2))

答案 1 :(得分:1)

在你的第一句话改变比较如下

SELECT * 
FROM Reservations 
WHERE ReservationDate <= '24/04/2015' AND ReservationDate >= '24/03/2015'"

答案 2 :(得分:1)

我尝试重新创建此功能,但在查询这些日期时却没有收到任何数据行。这可能是因为(正如abbaselmas所指出的)你的&lt;和&gt;似乎有点困惑。

问题似乎是您将日期存储为字符串。正如Bojan所提到的,你可以使用DATE()运算符在MySQL中解决这个问题。在T-SQL中,您可以使用强制转换,如下所示:

get(tr, 'Pointers')

当我更改日期时,它只返回了我期待看到的预订。

答案 3 :(得分:1)

这应该做:

Select * From Reservations
Where 
    DateSerial(Mid(ReservationDate, 7, 4), Mid(ReservationDate, 4, 2), Mid(ReservationDate, 1, 2)) 
    Between #17/03/2015# and #24/03/2015#;