Sql 如何将VARCHAR datetime转换为datetime类型以填充表

Sql 如何将VARCHAR datetime转换为datetime类型以填充表,sql,sql-server,tsql,datetime,converter,Sql,Sql Server,Tsql,Datetime,Converter,我有一个带有VARCHAR列的表,其值的格式如下: 2012-10-05T11:14:00-04:00 我需要将此数据放入另一个表中,其中字段的数据类型为DATETIME 我该如何进行转换 2012-10-05T11:14:00-04:00 到 ? 我试过: CAST(LEFT(REPLACE(fieldtimestamp, 'T', ' '), 19) AS DATETIME) 但它总是给我一个错误: 从字符串转换日期和/或时间时,转换失败 这将有助于: 选择CONVERTDATETIM

我有一个带有VARCHAR列的表,其值的格式如下:

2012-10-05T11:14:00-04:00
我需要将此数据放入另一个表中,其中字段的数据类型为DATETIME

我该如何进行转换

2012-10-05T11:14:00-04:00

?

我试过:

CAST(LEFT(REPLACE(fieldtimestamp, 'T', ' '), 19) AS DATETIME)
但它总是给我一个错误:

从字符串转换日期和/或时间时,转换失败

这将有助于: 选择CONVERTDATETIME,LEFTfieldtimestamp,19126

无需更换“T”

对我来说很有用

2012-10-05 11:14:00.000

在sql server 2012下

如果您使用的是MS sql server 2008,则可以使用DATETIMEOFFSET而不是DATETIME,它将正常工作

BEGIN
DECLARE @d DATETIMEOFFSET
SELECT @d = '2012-10-05 11:14:00-04:00'
END
选择日期,将日期“T”、“21”替换为日期时间 来自MyTbl1

如果你想要秒数,你需要记下21个字母

thedate                     DATETIME
2012-10-05T11:14:00-04:00   2012-10-05 11:14:00
2012-10-05T11:14:00-05:00   2012-10-05 11:14:00

在mysql中运行良好

双引号中没有空格。那是我的错!谢谢@Rj。他们在你的查询中做了。在删除T时要非常小心。这实际上可能会破坏你的日期/时间值,具体取决于日期格式/语言设置。请参见+1删除T甚至是一个非常糟糕的主意,因为这会使转换依赖于设置的日期格式。@MikaelEriksson是的,我也这么认为。op没有明确提供格式,因此没有使用安全转换。但是,这是我对使用yyyy-mm-dd日期格式而不在convert中指定格式时可能发生的情况的看法。即使没有格式,使用T也是安全的,因此您的答案是双重安全的:。和设置语言-尝试设置语言法语和任意一天>12。更多信息:为什么每个人都想替换T?这是有原因的!
BEGIN
DECLARE @d DATETIMEOFFSET
SELECT @d = '2012-10-05 11:14:00-04:00'
END
thedate                     DATETIME
2012-10-05T11:14:00-04:00   2012-10-05 11:14:00
2012-10-05T11:14:00-05:00   2012-10-05 11:14:00