我正在尝试比较以下格式的日期:“ dd-mm-yyyy”,它们实际上是数据库中的VARCHAR。
我有日期的示例:
26-11-2011
14-04-2009
27-02-2010
03-11-2020
04-06-2021
我的查询:
SELECT table
FROM database
WHERE STR_TO_DATE(expiration, '%d-%m-%Y') <= DATE_FORMAT(NOW(), '%d-%m-%Y');
当我运行此查询时,当我知道我有对应于该条件的日期时,它将返回0行。 (如上所示,应返回类似26-11-2011的行
事实是,当我使用>=
运行查询时,它会返回一些好的结果:
03-05-2021
05-05-2021
01-05-2021
谢谢!
答案 0 :(得分:1)
您正在混合DATE类型和带有日期表示形式的字符串。
您正在使用STR_TO_DATE()将VARCHAR日期转换为DATE类型,因此请使用CURDATE(),它也会返回有效的DATE类型,因此比较会将Apple与Apple进行比较。
WHERE STR_TO_DATE(expiration, '%d-%m-%Y') <= CURDATE();