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