如果我有一个“d-m-Y”格式的日期列,如何比较mysql中的日期(在特定范围之间)?

如果我有一个“d-m-Y”格式的日期列,如何比较mysql中的日期(在特定范围之间)?,mysql,sql,Mysql,Sql,我写了这段代码,但没有得到正确的记录 一, 二, 您的日期必须以ISO格式yyyy mm dd指定: SELECT first_name,date from user where date >= '2012-05-01' and date <= '2012-05-05' 您的日期必须以ISO格式yyyy mm dd指定: SELECT first_name,date from user where date >= '2012-05-01' and date <= '

我写了这段代码,但没有得到正确的记录

一,

二,


您的日期必须以ISO格式yyyy mm dd指定:

SELECT first_name,date from user 
where date >= '2012-05-01' and date <= '2012-05-05'

您的日期必须以ISO格式yyyy mm dd指定:

SELECT first_name,date from user 
where date >= '2012-05-01' and date <= '2012-05-05'

如果日期/时间格式与支持的格式匹配,MySQL将执行隐式转换以将值转换为日期时间


如果要显式地将字符串转换为DATETIME,则最好的选择是

如果日期/时间格式与支持的格式匹配,MySQL将执行隐式转换以将值转换为DATETIME


如果要将字符串显式转换为DATETIME,则如果日期列的数据类型为date,则将是最佳选择 使用日期\u FORMATdate,'%Y-%m-%d',否则

STR_TO_DATE(DATE_FORMAT(date,'%Y-%m-%d'))

如果日期列的数据类型为日期 使用日期\u FORMATdate,'%Y-%m-%d',否则

STR_TO_DATE(DATE_FORMAT(date,'%Y-%m-%d'))

首先使用STR\u将日期转换为

这将选择从2012年6月1日到2012年12月5日的日期

如果你真的想坚持你的格式

SELECT *
FROM table1
WHERE STR_TO_DATE(`date`,'%d-%m-%Y') 
      BETWEEN STR_TO_DATE('01-05-2012','%d-%m-%Y') AND 
              STR_TO_DATE('05-12-2012','%d-%m-%Y')

首先使用STR\u将日期转换为

这将选择从2012年6月1日到2012年12月5日的日期

如果你真的想坚持你的格式

SELECT *
FROM table1
WHERE STR_TO_DATE(`date`,'%d-%m-%Y') 
      BETWEEN STR_TO_DATE('01-05-2012','%d-%m-%Y') AND 
              STR_TO_DATE('05-12-2012','%d-%m-%Y')

谢谢你的回答。但是我不能改变我的整个数据库,我必须用“d-m-Y”格式。有什么好的解决方案吗?啊,好的,我在有样本数据之前回答了,我很抱歉。在这种情况下,我会像其他答案一样,使用STR_TO_DATE。谢谢你的回答。但是我不能改变我的整个数据库,我必须用“d-m-Y”格式。有什么好的解决方案吗?啊,好的,我在有样本数据之前回答了,我很抱歉。在这种情况下,我会像其他答案一样,使用STR_TO_DATE。你看到结果了吗?安基特| 17-08-2012。月份为05,而条件介于“2012-05-01”和“2012-12-05”之间。2012-12-05的格式为yyyy-MM-dd。那么问题出在哪里?好的,我知道了。实际上,OP的查询和给定值永远不会给出任何值。在OPs示例中,他在2012年6月1日和2012年6月5日之间进行查找,但不会有结果,这就是我将其更改为2012年12月5日的原因:约翰:我的问题在你回答后就解决了,非常感谢你的回答。你看到结果了吗?安基特| 17-08-2012。月份为05,而条件介于“2012-05-01”和“2012-12-05”之间。2012-12-05的格式为yyyy-MM-dd。那么问题出在哪里?好的,我知道了。实际上,OP的查询和给定值永远不会给出任何值。在OPs示例中,他在2012年6月1日和2012年6月5日之间进行查找,但不会有结果,这就是我将其更改为2012年12月5日的原因:DHey John我的问题在您的回答后就解决了,非常感谢您的回答。日期列的格式是矛盾的,因为日期只有在显示时才格式化,当您存储id时不会。您是否碰巧将日期存储在varchar列中?具有格式的日期列在术语上是矛盾的,日期仅在显示时格式化,而不是在存储id时格式化。您是否碰巧将日期存储在varchar列中?
SELECT *
FROM table1
WHERE STR_TO_DATE(`date`,'%d-%m-%Y') 
      BETWEEN STR_TO_DATE('01-05-2012','%d-%m-%Y') AND 
              STR_TO_DATE('05-12-2012','%d-%m-%Y')