如何从varchar列获取有效日期,其中日期以不同的格式存储

时间:2016-08-24 16:50:51

标签: mysql

我在 MySql 的表格中有一个列,其中包含任何格式的字符串日期(没有固定模式),它可以是m-d-yM-D-Ym/d/y或YY / MM / DD或MM / DD / YY或mm / dd / yy等。我的问题是我应该如何检测它然后更改为某种特定格式,即mm / dd / yy。

1 个答案:

答案 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-08yyyy-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;