Warm tip: This article is reproduced from serverfault.com, please click

tsql-修复SQL Server中的日期时间字符串

(tsql - Fix datetime string in SQL Server)

发布于 2020-11-29 10:24:20

我有一个表格,其中包含4300万行。在日期时间列中,数据看起来2020.04.22T04:39:29.359是,类型为VARCHAR

它看起来像ISO格式,但是有.,对于ISO我需要-将这些行中的值转换为datetime的最佳方法是什么?

我的变体之一是subst。到 -:

UPDATE table 
SET [Column 3] = REPLACE([Column 3], '.', '-');

但是然后我需要从末尾减少一微秒。

如何削减?

或者,也许你可​​以建议一些更保守的方法。

Questioner
navy
Viewed
0
Tim Biegeleisen 2020-11-29 18:41:48

TRY_CONVERT在首先进行一点按摩以将原始日期时间字符串转换成SQL Server可以识别的格式之后,你可以在这里使用

UPDATE yourTable
SET new_dt_col = TRY_CONVERT(
                     datetime,
                     REPLACE(LEFT(dt_col, 19), '.', '-') + '.' + RIGHT(dt_col, 3)
                 );

明确地说,上面使用的替换逻辑将首先将其转换为:

2020.04.22T04:39:29.359

到这个:

2020-04-22T04:39:29.359

你可以亲自验证以下转换是否正常工作:

SELECT TRY_CONVERT(datetime, '2020-04-22T04:39:29.359');