如何在 MySQL 中将字符串 'April 9, 2013' 转换为 'dd-mm-yyyy' 格式

问题描述 投票:0回答:1

我一直在尝试将由“2013 年 4 月 9 日”格式的日期组成的列转换为“%d/%m/%Y”格式,这将导致“09-04-2013”。

我尝试使用 STR_TO_DATE 函数,但结果为空值。 我想我将日期、月份和年份分成几列,然后将它们转换为整数后将它们组合起来,但我认为有一种更简单的方法。 请帮帮我

mysql data-cleaning sqldatatypes str-to-date
1个回答
0
投票

请不要!您应该更新表以正确存储日期字符串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<>小提琴

© www.soinside.com 2019 - 2024. All rights reserved.