我正在开发一个将日期存储在varchar(10) mysql字段中的数据库(太可悲了)。
我不能改变数据库结构(im构建一个小插件),但是我必须查询数据库查找行,这个数据字段在接下来的10天之间。
示例:
| fid | fdate |
| 1 | 10/09/2010 |
| 2 | 17/09/2010 |
| 3 | 19/09/2010 |我必须用fid 1和2得到行,因为现在的日期是<= + 10天。
通常我会提出这样的疑问:
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子句无助于提高查询速度。
有什么想法吗?
编辑
在阿德里亚诺的评论之后,正确的解决办法是
SELECT fid FROM test WHERE STR_TO_DATE(fdate, '%d/%m/%Y') <= DATE_ADD(NOW(), INTERVAL 10 DAY);这样我就可以避免减刑和有条款了。
发布于 2010-09-07 14:15:39
使用日期()从您的格式创建日期如何?
编辑在阅读了您的评论后,创建了一个类似于您的表:
mysql> SELECT fid, fdate FROM test;
+------+------------+
| fid | fdate |
+------+------------+
| 1 | 10/9/2010 |
| 2 | 17/9/2010 |
| 3 | 19/09/2010 |
+------+------------+然后做了
mysql> SELECT fid FROM test WHERE STR_TO_DATE(fdate, '%d/%m/%Y') <= DATE_ADD(NOW(), INTERVAL 10 DAY);
+------+
| fid |
+------+
| 1 |
| 2 |
+------+似乎很管用。你到底得到了什么?
https://stackoverflow.com/questions/3659304
复制相似问题