我正在使用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
的最佳方式是什么?
答案 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