在SQL Server中将varchar转换为datetime2

时间:2011-04-27 15:09:09

标签: sql sql-server

我正在使用SQL Server 2008 R2,我从平面文件导入。我无法正确导入datetime列,因此我暂时将其指定为varchar(50)。现在我想将其转换为datetime2格式。但是,这样做时我得到了错误 -

  

转换时转换失败   角色的日期和/或时间   字符串。

varchar(50)列中当前的数据如下所示:

2008-04-02-16.43.32.179530
2009-01-12-20.15.41.936632
2009-02-18-16.54.49.071662

将其转换为datetime2的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

不太好

;WITH T(YourCol) As
(
SELECT '2008-04-02-16.43.32.179530' union all
SELECT '2009-01-12-20.15.41.936632' union all
SELECT '2009-02-18-16.54.49.071662'
)
SELECT CAST(
            STUFF(REPLACE(
                          STUFF(YourCol,11,1,'T')
                  ,'.',':')
            ,20,1,'.')
        AS DATETIME2)
FROM T

答案 1 :(得分:1)

不幸的是,这不是公认的时间戳格式。它接近ODBC Canonical格式,但并不完全。你必须做一些字符串操作。

如果您取前10个字符,即ODBC Canonical(yyyy-mm-dd)格式的日期,则无需进行任何更改。这很容易:LEFT(dateAsStringColumn, 10)。现在,您需要使用字符12到19(跳过日期和时间之间的短划线),但使用“。”取而代之 ”:”。最后,逐字地对20-26字符进行处理。使用样式21(ODBC Canonical with milliseconds)将整个事物转换为Datetime2。

试试这个:

SELECT CONVERT(datetime2, LEFT(myColumn, 10) + " " + REPLACE(SUBSTRING(myColumn, 12, 8), ".", ":") + RIGHT(myColumn, 7), 21) as DateFromString FROM myTable