我正在尝试使用以下查询根据特定日期范围从 mysql 数据库中检索记录:
$query = "SELECT * FROM data WHERE" .
"date between '11/02/13' and '11/31/13' ";
我遇到的问题是这个查询不区分年份。换句话说,它返回 2014 年 11 月和 2013 年的记录。我确信这与我在使用 mysql 日期时缺乏知识有关,所以如果有人能指出我正确的方向,那将是非常重要的赞赏!
我正在尝试使用以下查询根据特定日期范围从 mysql 数据库中检索记录:
$query = "SELECT * FROM data WHERE" .
"date between '11/02/13' and '11/31/13' ";
我遇到的问题是这个查询不区分年份。换句话说,它返回 2014 年 11 月和 2013 年的记录。我确信这与我在使用 mysql 日期时缺乏知识有关,所以如果有人能指出我正确的方向,那将是非常重要的赞赏!
我想您必须将日期字符串转换为 DATE:
CAST('2003-01-01' AS DATE)
将日期存储为 varchar 不好,但您可以使用STR_TO_DATE将字符串转换为日期
SELECT * FROM data WHERE
STR_TO_DATE(`date`,'%m/%d/%y') between '11/02/13' and '11/31/13'
SELECT * FROM data WHERE
date between '11/02/13' and '11/31/13' GROUP BY YEAR(date)
在 MySQL 中,您需要使用不同的日期格式。
$query = "SELECT * FROM data WHERE" . "date between '2013-11-02' and '2013-11-31' ";
date
正如您在评论中所述,将字段从 varchar 转换为日期会导致 MySQL 对日期值的误解,正如这个小提琴所证明的那样。
为了正确地将其转换为日期字段,您应该将其切换回 varchar,然后执行以下操作:
update data set date=date_format(STR_TO_DATE(`date`,'%m/%d/%y'),'%Y-%d-%m')
然后您可以将其转换为日期数据类型,MySQL 将正确解释这些值。
从那时起,使用以下语法检查日期范围:
SELECT * FROM data WHERE date between '2013-02-11' and '2013-31-11'
至于有关其他框架访问您的数据的评论,请注意数据库应该使用正确的数据类型以正确的方式存储所有内容。客户端应用程序应该调整它们对数据库运行查询的方式,而不是相反。