仅按日期查询日期时间列

时间:2016-06-28 08:32:58

标签: php mysql datetime

这里我有一个日期时间格式的列。我想按给定的日期范围搜索表。但我写的查询是生成错误

  

#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法   靠近' 14:27:12)和日期(2016-06-28 14:27:12)限制0,30 '在第1行

SELECT * FROM `tele_incoming_call` WHERE DATE(`incoming_call_date`) BETWEEN date(2016-06-27 14:27:12) AND 
date(2016-06-28 14:27:12)

4 个答案:

答案 0 :(得分:0)

删除date并引用时间。

SELECT * FROM `tele_incoming_call` WHERE (incoming_call_date BETWEEN '2016-06-27 14:27:12' AND '2016-06-28 14:27:12')

答案 1 :(得分:0)

SELECT * FROM `tele_incoming_call` WHERE MONTH(`incoming_call_date`) BETWEEN MONTH(2016-06-27 14:27:12) AND 
MONTH(2016-06-28 14:27:12) AND YEAR(`incoming_call_date`) BETWEEN YEAR(2016-06-27 14:27:12) AND 
YEAR(2016-06-28 14:27:12) AND DAY(`incoming_call_date`) BETWEEN DAY(2016-06-27 14:27:12) AND 
DAY(2016-06-28 14:27:12)

但更好的是

SELECT * FROM `tele_incoming_call` WHERE `incoming_call_date` BETWEEN '2016-06-27 00:00:00' AND '2016-06-28 23:59:59'

答案 2 :(得分:0)

我发现以下sql适合我

SELECT * FROM `tele_incoming_call` WHERE `incoming_call_date` BETWEEN '2016-06-27' AND 
'2016-06-28'

答案 3 :(得分:-1)

MySQL查询中的

date(2016-06-27 14:27:12)错误。

将查询更新为以下内容。

$sql_query="SELECT *
FROM `tele_incoming_call`
WHERE DATE(`incoming_call_date`) 
BETWEEN ".date('Y-m-d',strtotime('2016-06-27 14:27:12'))." AND 
".date('Y-m-d',strtotime('2016-06-28 14:27:12'));

要从String获取get,我们可以使用strtotime()将给定的字符串转换为 Unix时间戳

然后我们将该时间戳传递给{{ 3}}获取所需的Y-m-d格式的日期,以便在MySQL中进行比较。

<强>更新

您可以使用date() MySQL函数来仅比较日期。

所以你的查询看起来像这样,

$sql_query="SELECT *
FROM `tele_incoming_call`
WHERE DATE(`incoming_call_date`) 
BETWEEN DATE(STR_TO_DATE('2016-06-28 14:27:12','%Y-%m-%d %H:%i:%s'),'%Y-%m-%d') AND 
DATE(STR_TO_DATE('2016-06-28 14:28:12','%Y-%m-%d %H:%i:%s'),'%Y-%m-%d')";