在Sent
字段 ( varchar
) 中,文本的格式如下:
2012 年 12 月 4 日星期二 16:10:05 GMT
我想转换为DATETIME
字段类型,SQL查询中的解决方案是什么?
在Sent
字段 ( varchar
) 中,文本的格式如下:
2012 年 12 月 4 日星期二 16:10:05 GMT
我想转换为DATETIME
字段类型,SQL查询中的解决方案是什么?
一般来说,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
;
SELECT str_to_date( substring_index(DateString, " ", -5) ,
"%M %d %H:%i:%S GMT %YYYY" )
FROM DateStrings;
我删除了一周中的 3 个字符(这是多余的),然后使用 str_to_date 来解析您的特定格式。