0

我正在尝试使用以下查询根据特定日期范围从 mysql 数据库中检索记录:

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

我遇到的问题是这个查询不区分年份。换句话说,它返回 2014 年 11 月和 2013 年的记录。我确信这与我在使用 mysql 日期时缺乏知识有关,所以如果有人能指出我正确的方向,那将是非常重要的赞赏!

4

5 回答 5

0

我想您必须将日期字符串转换为 DATE:

CAST('2003-01-01' AS DATE)
于 2013-11-02T19:07:51.913 回答
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

于 2013-11-02T19:10:28.503 回答
0
SELECT * FROM data WHERE
          date between '11/02/13' and '11/31/13' GROUP BY YEAR(date)
于 2013-11-02T19:11:09.200 回答
0

在 MySQL 中,您需要使用不同的日期格式。

$query = "SELECT * FROM data WHERE" .  "date between '2013-11-02' and '2013-11-31' ";
于 2013-11-02T19:12:46.630 回答
0

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'

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

于 2013-11-02T20:07:13.407 回答