我正在开发一个数据库,该数据库将日期存储在varchar(10)
mysql 字段(太悲伤了)。
我无法更改数据库结构(我正在构建一个小插件),但我必须查询数据库,查找该数据字段在接下来的 10 天内的行。
Example:
| fid | fdate |
| 1 | 10/09/2010 |
| 2 | 17/09/2010 |
| 3 | 19/09/2010 |
我必须获取 fid 1 和 2 的行,因为日期
通常我会进行这样的查询:
SELECT fid FROM table WHERE fdate <= DATE_ADD(NOW(), INTERVAL 10 DAY);
或者,如果日期的格式为“yyyymmdd”:
SELECT fid FROM table WHERE fdate <= DATE_FORMAT(NOW(), '%Y%m%d');
但它们对格式毫无用处dd/mm/yyyy
.
我已经想通了
SELECT fid, CONCAT(SUBSTRING(fdate, 7, 4), SUBSTRING(fdate, 4, 2), SUBSTRING(fdate, 1, 2)) AS mydate FROM table HAVING mydate <= DATE_ADD(NOW(), INTERVAL 10 DAY);
但我想用 concat 和子字符串重建日期格式有点过分了,having
子句对查询速度没有帮助。
任何想法?
EDIT
阿德里亚诺评论后,正确的解决方案是
SELECT fid FROM test WHERE STR_TO_DATE(fdate, '%d/%m/%Y') <= DATE_ADD(NOW(), INTERVAL 10 DAY);
所以我可以避免 concat 和having 子句。