Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询不会选择日期之间的所有行_Sql_Datetime_Ms Access - Fatal编程技术网

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

SQL查询不会选择日期之间的所有行,sql,datetime,ms-access,Sql,Datetime,Ms Access,我的SQL查询没有选择我请求的所有行。它只考虑日期时间的一部分;几个月没有得到任何关注 这是我的疑问: SELECT * FROM Reservations WHERE ReservationDate >= '24/04/2015' AND ReservationDate <= '24/03/2015'" 在你的第一句话中,改变比较如下 SELECT * FROM Reservations WHERE ReservationDate <= '24/04/2015' A

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

这是我的疑问:

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

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

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

尝试对日期使用between运算符

    select * from Reservations 
    where 
        ReservationDate  between '17/03/2015'
    and
        DATE_ADD('24/04/2015',INTERVAL 1 DAY) // or something like that
此外,在MySQL中,您可以使用函数从datetime中提取日期:

    select * from Reservations
    where 
         DATE(ReservationDate) BETWEEN '17/03/2015' AND '24/03/2015'
如果您使用的是MS Sql Server,那么可以通过一些变通方法从字符串中获取日期

更新:

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

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

select  *  from Reservations
where CDate(date) between #17/03/2015# and #24/03/2015#;
如果因为CDate无法重新设置格式而无法工作,则可以使用DateSerialyear、month、day来生成日期。您需要使用mid$和Cint来构建年、月和日参数。类似于yyyy mm dd格式的内容:

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

我尝试重新创建这个,但在查询这些日期时没有收到任何数据行。这可能是因为正如阿巴斯马斯指出的那样,你的似乎有点困惑

问题似乎是您将日期存储为字符串。正如Bojan提到的,您可以在MySQL中使用DATE操作符解决这个问题。在T-SQL中,可以使用cast,如下所示:

set dateformat dmy
create table #reservations (ReservationID int, FriendID int, TableNumber int, ReservationDate varchar(30), ReservationStatus bit)   
INSERT INTO #Reservations values    (16, 58767732, 32, '21/04/2015 17:06:54', 'FALSE'),
(17, -1, 32, '21/04/2015 17:10:41', 'FALSE'),
(18, -1, 2, '21/04/2015 17:17:23', 'FALSE'),
(2, 58767732, 3, '04/04/2015 19:37:17', 'FALSE'),
(3, -1, 7, '04/04/2015 19:37:43', 'FALSE'),
(4, -1, 5, '04/04/2015 23:24:24', 'FALSE'),
(5, -1, 31, '05/04/2015 16:29:02', 'FALSE'),
(6, -1, 6, '05/04/2015 16:40:29', 'FALSE'),
(8, 58767732, 32, '09/04/2015 16:24:00', 'FALSE'),
(9, -1, 6, '09/04/2015 16:25:03', 'FALSE'),
(7, -1, 6, '05/04/2015 17:12:47', 'FALSE')

SELECT * 
FROM #Reservations 
WHERE cast(left(ReservationDate,10) as date) <= '24/04/2015' AND cast(left(ReservationDate,10) as date) >= '17/03/2015'

drop table #reservations
当我更改日期时,它只返回我希望看到的预订。

这应该可以:

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#;

您可以包括预订的样本数据吗?ReservationID | FriendID |ReservationDate@Netanelgo请换到或。您不能保留日期在两个不相交的数据范围之间的保留。@ConsiderMe,而不是switch>=第一个也是最重要的问题是,这些是真正的日期还是字符串?您使用的是哪种数据库管理系统?'24/04/2015'是字符串,而不是日期。您的意思是日期和文字没有区别吗?那么数据类型转换的目的是什么?若您将字符串与日期进行比较,那个么优化器将执行隐式数据类型转换,您应该避免这种情况。总是,在与日期进行比较时,显式地将文本转换为日期。我不是说,人们问这个问题时已经尝试了日期格式,这不是错误。当然它应该是datetime,不需要讨论类型,它应该是DateTimeMate。如果你知道我想告诉你什么,那么我们都很高兴:-@Netanelgo你在用什么数据库?Ms Sql Server、Oracle、MySql?@Netanelgo那么你试过这个了吗:它很管用!只是一个更次要的问题,当它到达2015年3月12日的日期时,它选择的日期格式是mm/dd/yyyy,而main是dd/mm/yyyy。我该怎么办?@Netanelgo我想这可能是您的公司设置、地区设置等。我的公司使用dd/mm/yyyy。难道没有任何程序化的方法吗?
set dateformat dmy
create table #reservations (ReservationID int, FriendID int, TableNumber int, ReservationDate varchar(30), ReservationStatus bit)   
INSERT INTO #Reservations values    (16, 58767732, 32, '21/04/2015 17:06:54', 'FALSE'),
(17, -1, 32, '21/04/2015 17:10:41', 'FALSE'),
(18, -1, 2, '21/04/2015 17:17:23', 'FALSE'),
(2, 58767732, 3, '04/04/2015 19:37:17', 'FALSE'),
(3, -1, 7, '04/04/2015 19:37:43', 'FALSE'),
(4, -1, 5, '04/04/2015 23:24:24', 'FALSE'),
(5, -1, 31, '05/04/2015 16:29:02', 'FALSE'),
(6, -1, 6, '05/04/2015 16:40:29', 'FALSE'),
(8, 58767732, 32, '09/04/2015 16:24:00', 'FALSE'),
(9, -1, 6, '09/04/2015 16:25:03', 'FALSE'),
(7, -1, 6, '05/04/2015 17:12:47', 'FALSE')

SELECT * 
FROM #Reservations 
WHERE cast(left(ReservationDate,10) as date) <= '24/04/2015' AND cast(left(ReservationDate,10) as date) >= '17/03/2015'

drop table #reservations
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#;