将字符串日期列更改为日期时间SQL Server

M0r*_*rty 0 sql sql-server

我目前有一个varchar包含400个条目的列.每行的格式如下:

'Thu, 18 Sep 2014 23:59:06 '
Run Code Online (Sandbox Code Playgroud)

是否可以将此varchar列更改为datetime

我试过这个......

ALTER TABLE BE
ALTER COLUMN pubDate datetime
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误

消息241,级别16,状态1,行1
转换在从字符串转换日期和/或时间时失败.

Den*_*ise 5

我将创建一个新的datetime列,然后编写一个update语句来插入正确的值,然后删除旧列(如果需要).

update语句如下所示:

update be set be.dt=convert(datetime, be.pubDate)
Run Code Online (Sandbox Code Playgroud)

编辑:在评论中即将与okaram相同.您可能必须将数据修复为SQL Server接受的格式.如果您在开始时摆脱工作日并在结束时添加毫秒,那么您的距离非常接近113.你需要它看起来像这样:

23 Oct 2016 11:02:07:577
Run Code Online (Sandbox Code Playgroud)

所以

update be set be.dt=convert(datetime, 
CONCAT(SUBSTRING(be.pubDate, Charindex(', ', be.pubDate), LEN(be.pubDate)),
':000'), 113)
Run Code Online (Sandbox Code Playgroud)