使用mysql日期范围

时间:2013-11-02 19:04:42

标签: mysql

我试图使用以下查询基于特定日期范围从mysql数据库中检索记录:

 $query = "SELECT * FROM data WHERE" .
          "date between '11/02/13' and '11/31/13' ";

我遇到的问题是此查询不会根据年份进行区分。换句话说,它会返回2014年11月以及2013年的记录。我确信这与我在处理mysql日期时缺乏知识有关,所以如果有人能指出我正确的方向,那将是非常重要的理解!

5 个答案:

答案 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'

STR_TO_DATE

答案 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'

关于访问数据的其他框架的注释,请注意数据库应使用正确的数据类型以正确的方式存储所有内容。客户端应用程序应该调整它们对数据库运行查询的方式,而不是相反