我试图使用以下查询基于特定日期范围从mysql数据库中检索记录:
$query = "SELECT * FROM data WHERE" .
"date between '11/02/13' and '11/31/13' ";
我遇到的问题是此查询不会根据年份进行区分。换句话说,它会返回2014年11月以及2013年的记录。我确信这与我在处理mysql日期时缺乏知识有关,所以如果有人能指出我正确的方向,那将是非常重要的理解!
答案 0 :(得分:0)
我猜你必须将日期字符串转换为DATE:
CAST('2003-01-01' AS DATE)
答案 1 :(得分:0)
将日期存储为varchar很糟糕,但您可以使用STR_TO_DATE将字符串转换为日期
SELECT * FROM data WHERE
STR_TO_DATE(`date`,'%m/%d/%y') between '11/02/13' and '11/31/13'
答案 2 :(得分:0)
SELECT * FROM data WHERE
date between '11/02/13' and '11/31/13' GROUP BY YEAR(date)
答案 3 :(得分:0)
在MySQL中,您需要使用不同的日期格式。
$query = "SELECT * FROM data WHERE" . "date between '2013-11-02' and '2013-11-31' ";
答案 4 :(得分:0)
如评论中所述,将date
字段从varchar转换为日期会导致MySQL错误解释日期值as this fiddle proves。
为了将其正确转换为日期字段,您应该将其切换回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'
关于访问数据的其他框架的注释,请注意数据库应使用正确的数据类型以正确的方式存储所有内容。客户端应用程序应该调整它们对数据库运行查询的方式,而不是相反。