我在 MySql 的表格中有一个列,其中包含任何格式的字符串日期(没有固定模式),它可以是m-d-y
或M-D-Y
或m/d/y
或YY / MM / DD或MM / DD / YY或mm / dd / yy等。我的问题是我应该如何检测它然后更改为某种特定格式,即mm / dd / yy。
答案 0 :(得分:2)
如果您能猜出在varchar字段中存储日期的不同格式的数量,那么处理问题会更容易;
一种方法是将所有这些不同的格式放在下面给出的查询中:
SELECT
COALESCE(
STR_TO_DATE(your_date_column,'%m-%d-%Y'),
STR_TO_DATE(your_date_column,'%M-%D-%Y'),
STR_TO_DATE(your_date_column,'%m/%d/%Y'),
STR_TO_DATE(your_date_column,'%m-%d-%Y'),
....
.
.
)
FROM your_table;
<强>演示:强>
SET @your_date_field := '8/8/2016';
SELECT
COALESCE(
STR_TO_DATE(@your_date_field,'%m-%d-%Y'),
STR_TO_DATE(@your_date_field,'%M-%D-%Y'),
STR_TO_DATE(@your_date_field,'%m/%d/%Y'),
STR_TO_DATE(@your_date_field,'%M/%D/%Y')
);
输出 2016-08-08
(yyyy-mm-dd)
注意:强>
但是日期应该存储在date
数据类型中。违反这一点会导致这种繁琐的情况。
因此,最好将这些日期字符串移动到date数据类型列。
更多:要将这些日期字符串移至date
数据类型列,您可以按照以下步骤操作:
ALTER TABLE your_table ADD COLUMN date_new date;
UPDATE
your_table
SET date_new = COALESCE(
STR_TO_DATE(your_date_column,'%m-%d-%Y'),
STR_TO_DATE(your_date_column,'%M-%D-%Y'),
STR_TO_DATE(your_date_column,'%m/%d/%Y'),
STR_TO_DATE(your_date_column,'%m-%d-%Y'),
....
.
.
);
ALTER TABLE your_table DROP COLUMN `date`;
ALTER TABLE datestable CHANGE COLUMN `date_new` `date` date;