Mysql:将日期从“dd/mm/yyyy”转换为“yyyymmdd”

2023-11-27

我正在开发一个数据库,该数据库将日期存储在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 子句。


使用怎么样str_to_date()根据您的格式创建日期?

EDIT阅读您的评论后,我创建了一个像您一样的表格:

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 | 
+------+

似乎有效。你到底得到了什么?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql:将日期从“dd/mm/yyyy”转换为“yyyymmdd” 的相关文章

随机推荐