将字符串/ varchar转换为MySQL表之间的日期

时间:2013-05-05 15:30:42

标签: mysql date

我有一个大型的PHP项目,我一直在为自己的事业而努力。

我有一个MySQL表,大约有2600个条目,我想“修复”日期。我当前的表有3个包含字符串日期的VARCHAR列。我想将这些转换为重复的表,但是在路上将它们更改为DATE类型。

一旦我完成转换并且一切看起来都不错,我会将新表复制到旧数据库,并且只允许日期选择器在前进的基础上输入这些日期。

大多数现有字符串日期采用mm-dd-yyyy格式,例如:05-03-2013。有些是mm/dd/yyyy,例如:05/03/2013,还有一些是MONTH DAY,YEAR格式,例如:March 26th, 2013

我最终想要的是yyyy-mm-dd格式,例如:2013-05-02

认为我可以使用PHP完成此操作,将每个字符串日期传递给strtotime()然后传递date(),但是想知道MySQL是否可以直接执行此操作。

2 个答案:

答案 0 :(得分:2)

查看STR_TO_DATE功能:

UPDATE yourtable
SET
  new_column = STR_TO_DATE(varchar_date, '%m-%d-%Y')
WHERE
  STR_TO_DATE(varchar_date, '%m-%d-%Y') IS NOT NULL

然后是相同的查询,日期格式为'%m/%d/%Y',然后再次使用'%M %D, %Y'。 如果格式不匹配,STR_TO_DATE将返回NULL并且不会更新行。

如果您希望将现有数据插入新表格,可以使用以下内容:

INSERT INTO new_table (ID, col1, col2, new_column)
SELECT
  ID, col1, col2,
  COALESCE(STR_TO_DATE(varchar_date, '%m-%d-%Y'),
           STR_TO_DATE(varchar_date, '%m/%d/%Y'),
           STR_TO_DATE(varchar_date, '%M %D, %Y'))
FROM oldtable

(new_column是一个日期列,然后您可以格式化使用PHP或使用DATE_FORMAT的方式)

答案 1 :(得分:0)

尝试

SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');

参考:

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date