我一直在尝试将由“2013 年 4 月 9 日”格式的日期组成的列转换为“%d/%m/%Y”格式,这将导致“09-04-2013”。
我尝试使用 STR_TO_DATE 函数,但结果为空值。 我想我将日期、月份和年份分成几列,然后将它们转换为整数后将它们组合起来,但我认为有一种更简单的方法。 请帮帮我
请不要!您应该更新表以正确存储日期字符串DATE。
your_table
id | 日期_列 |
---|---|
1 | 2012 年 9 月 29 日 |
2 | 2013 年 4 月 9 日 |
3 | 2015 年 3 月 3 日 |
4 | 2012 年 12 月 19 日 |
将日期存储为字符串后,我们无法以任何有意义的方式对它们进行排序(不先对其进行转换)。
SELECT * FROM your_table ORDER BY date_col ASC;
输出
id | 日期_列 |
---|---|
2 | 2013 年 4 月 9 日 |
4 | 2012 年 12 月 19 日 |
3 | 2015 年 3 月 3 日 |
1 | 2012 年 9 月 29 日 |
这对任何人来说都没有多大用处。假设这些存储在 VARCHAR 列中,
December 19, 2012
将使用 18 个字节。存储为数据类型 DATE 时,它将是 3 个字节。
首先重新格式化
date_col
的内容:
UPDATE your_table SET date_col = STR_TO_DATE(date_col, '%M %e, %Y');
然后更改数据类型:
ALTER TABLE your_table MODIFY COLUMN date_col DATE NOT NULL;
your_table
id | 日期_列 |
---|---|
1 | 2012-09-29 |
2 | 2013-04-09 |
3 | 2015-03-03 |
4 | 2012-12-19 |
现在可以轻松格式化和/或排序:
SELECT id, date_col, DATE_FORMAT(date_col, '%d-%m-%Y') AS dt
FROM your_table
ORDER BY date_col ASC;
输出
id | 日期_列 | dt |
---|---|---|
1 | 2012-09-29 | 2012年9月29日 |
4 | 2012-12-19 | 2012年12月19日 |
2 | 2013-04-09 | 2013年9月4日 |
3 | 2015-03-03 | 2015年3月3日 |
这是一个db<>小提琴。