0

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

2012 年 12 月 4 日星期二 16:10:05 GMT

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

4

2 回答 2

3

一般来说,STR_TO_DATE()用于此类任务。

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

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
;
于 2013-05-08T15:37:50.077 回答
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

于 2013-05-08T15:44:54.953 回答