将文本日期转换为日期时间?

时间:2013-05-08 15:25:35

标签: mysql sql datetime-format

Sent字段(varchar)中,文本的格式如下:

Tue Dec 04 04:10:05 GMT 2012

我想转换为DATETIME字段类型,SQL查询中的解决方案是什么?

2 个答案:

答案 0 :(得分:3)

一般来说,人们会使用STR_TO_DATE()来完成此类任务。

但是,在这种情况下,时区信息的存在会出现问题,因为STR_TO_DATE()无法解析此类字符串。我建议先使用SUBSTRING_INDEX()CONCAT()一起提取不包括时区的数据:

SELECT STR_TO_DATE(
         CONCAT(
           SUBSTRING_INDEX(Sent, ' ',  4),
           ' ',
           SUBSTRING_INDEX(Sent, ' ', -1)
         ),
         '%a %b %d %T %Y'
       )
FROM   my_table

sqlfiddle上查看。

转换现有列的数据类型:

ALTER TABLE my_table
  ADD COLUMN Sent_TIMESTAMP TIMESTAMP AFTER Sent
;

UPDATE my_table
SET    Sent_TIMESTAMP = STR_TO_DATE(
         CONCAT(
           SUBSTRING_INDEX(Sent, ' ',  4),
           ' ',
           SUBSTRING_INDEX(Sent, ' ', -1)
         ),
         '%a %b %d %T %Y'
       )
;

ALTER TABLE my_table
  DROP   Sent,
  CHANGE Sent_TIMESTAMP Sent TIMESTAMP
;

答案 1 :(得分:1)

最简单的方法是(如果所有日期都是GMT):

SELECT str_to_date( substring_index(DateString, " ", -5) , 
       "%M %d %H:%i:%S GMT %YYYY" )
FROM DateStrings;

我删除了一周中的3个字符(这是多余的),而不是使用str_to_date来解析您的特定格式。

小提琴:http://www.sqlfiddle.com/#!2/92a67/21