![](/img/trans.png)
[英]How to convert dates from varchar to datetime2 in SQL Server?
[英]Converting varchar to datetime2 in 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
的最佳方法是什么?
不漂亮
;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
不幸的是,这不是公认的时间戳格式。 它接近 ODBC 规范格式,但不完全。 你必须做一些字符串操作。
如果您取前 10 个字符,那就是 ODBC 规范 (yyyy-mm-dd) 格式的日期,无需更改。 这很简单: LEFT(dateAsStringColumn, 10)
。 现在,您需要字符 12 到 19(跳过日期和时间之间的破折号),但需要使用“.”。 取而代之 ”:”。 最后,逐字添加字符 20-26。 使用样式 21(ODBC 规范,毫秒)将整个事情转换为 Datetime2。
尝试这个:
SELECT CONVERT(datetime2, LEFT(myColumn, 10) + " " + REPLACE(SUBSTRING(myColumn, 12, 8), ".", ":") + RIGHT(myColumn, 7), 21) as DateFromString FROM myTable
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.