Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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
MySQL选择行内容在两小时之间的位置_Mysql_Sql_Where_Between - Fatal编程技术网

MySQL选择行内容在两小时之间的位置

MySQL选择行内容在两小时之间的位置,mysql,sql,where,between,Mysql,Sql,Where,Between,我有这一排: 如何仅在07:00和00:00之间获得结果?我的情况是07:00,23:59和00:00 $query = "SELECT * FROM `".$today."` WHERE hour BETWEEN '07:00' AND '00:00'"; 。。。不返回任何内容。我认为它应该更像 SELECT * FROM `".$today."` WHERE hour >= "7:00" AND hour <= "24:00"; SELECT*FROM`.$today.`W

我有这一排:

如何仅在
07:00
00:00
之间获得结果?我的情况是07:00,23:59和00:00

$query = "SELECT * FROM `".$today."` WHERE hour BETWEEN '07:00' AND '00:00'";

。。。不返回任何内容。

我认为它应该更像

SELECT * FROM `".$today."` WHERE hour >= "7:00" AND hour <= "24:00";

SELECT*FROM`.$today.`WHERE hour>=“7:00”和hourDate存储为varchar使得查询比较非常困难,应该以适当的数据类型存储

您案例中的解决方法,即使用varchar存储时间,您可以将某些内容用作

select * from 
table_name 
where 
TIME_FORMAT ( 
   str_to_date ( 
       replace (hour,':',''),'%H%i'
   ),'%H:%i'
) 
between '07:00' AND '23:59';

一般来说,问题/数据结构设置似乎有点模糊,因为如果参考07:00->00:00或00:00->07:00,您需要小心

使用时间戳可能会省去很多麻烦,例如:

CREATE TABLE test(time1 TIMESTAMP, data VARCHAR(20));
INSERT INTO test(time1, data) VALUES('2014-05-09 07:00', 'kala1');
INSERT INTO test(time1, data) VALUES('2014-05-09 06:43', 'kala2');
INSERT INTO test(time1, data) VALUES('2014-05-09 23:59', 'kala3');
INSERT INTO test(time1, data) VALUES('2014-05-10 00:00', 'kala4');
INSERT INTO test(time1, data) VALUES('2014-05-10 00:40', 'kala5');
然后你可以做这样的事情

SELECT * FROM test WHERE time1 >= '2014-05-09 07:00' AND time1 <= '2014-05-10 00:00'

从测试中选择*,其中time1>='2014-05-09 07:00'和time1小时的数据类型是什么?VARCHAR。我应该使用其他的吗?将其更改为
time
datatype,问题的一部分是因为您没有主键,所以这个“表”根本不是表(在关系数据库的意义上)我认为问题是您试图使用00:00作为一天的结束,但MySQL认为它是开始,因此,在比较中,它小于07:00,因此BETWEEN(在varchar和time版本中)查找不存在的>07:00和<00:00的值。反过来做,你会得到时间>00:00和<07:00,这样会产生一些行,但不是你想要的行,因为它是07:00之前的时间集,而不是之后的时间集。如果可能,将日期包括在数据中可以对其进行排序,00:00行可以设置为次日,例如,搜索日期>2013年12月22日07:00和<2013年12月23日00:00(使用
07:00
而不是
7:00
转义)返回06:43、07:00、00:00和00:40。这将返回06:43、07:00、00:00和00:40。严格来说,不需要替换(
是无差别字符),但您至少调用了OP的特例。在
07:00-00:00
之间返回0个结果,在
00:00-07:00
之间返回06:43。我可以将我的数据类型更改为
time
,但我的时间是
G:I
格式。我该怎么办?@user3474451:您可以发布表结构吗?@Ravinder yes似乎在t时失败比较是在午夜0点进行的,我以前没有意识到。现在我可以给OP一个建议,用datetime Y-m-d H:I:s存储数据,这将便于查询。但是我想看看是否有一些关于使用current的工作,所以如果你有一些想法,请作为答案发布。替换/转换是不必要的-t他
在本例中本质上是一个无差别的字符,数据的格式很好,毕竟字符
'07'
比字符
'23'
小。主要问题是OP决定使用
00:00
来表示一天的结束,而这实际上意味着第二天的开始。这取决于在这种情况下,我们不知道是否有可用的日期值。不过,这可能会让他停止使用
00:00
作为一天的结束。
SELECT * FROM test WHERE time1 >= '2014-05-09 07:00' AND time1 <= '2014-05-10 00:00'