修复 SQL 服务器中的日期时间字符串
Fix datetime string in SQL Server
我有一个 table 有 43 000 000 行。在日期时间列中,数据看起来 2020.04.22T04:39:29.359
并且类型为 VARCHAR
.
它看起来像 ISO 格式,但有 .
,对于 ISO,我需要 -
。
将这些行中的值转换为日期时间的最佳方法是什么?
我的变体之一是 subst 。至 -:
UPDATE table
SET [Column 3] = REPLACE([Column 3], '.', '-');
但我需要从末尾缩短一微秒。
这个剪裁怎么做?
或者你可以建议更真实的方法。
您可以在此处使用 TRY_CONVERT
,首先进行一些修改,将您的原始日期时间字符串转换为 SQL 服务器可识别的格式:
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');
如果 table 中的每一行的日期都遵循 2020.04.22T04:39:29.359 格式,您可以执行以下更新语句:
UPDATE table
SET [Column 3] = SUBSTRING([Column 3],1,4) + '-' + SUBSTRING([Column 3],6,2) + '-' + SUBSTRING([Column 3],9,15)
只修复第5和第8个字符,不影响“.”。来自微秒的字符。
之后,您应该能够转换为日期时间。
我有一个 table 有 43 000 000 行。在日期时间列中,数据看起来 2020.04.22T04:39:29.359
并且类型为 VARCHAR
.
它看起来像 ISO 格式,但有 .
,对于 ISO,我需要 -
。
将这些行中的值转换为日期时间的最佳方法是什么?
我的变体之一是 subst 。至 -:
UPDATE table
SET [Column 3] = REPLACE([Column 3], '.', '-');
但我需要从末尾缩短一微秒。
这个剪裁怎么做?
或者你可以建议更真实的方法。
您可以在此处使用 TRY_CONVERT
,首先进行一些修改,将您的原始日期时间字符串转换为 SQL 服务器可识别的格式:
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');
如果 table 中的每一行的日期都遵循 2020.04.22T04:39:29.359 格式,您可以执行以下更新语句:
UPDATE table
SET [Column 3] = SUBSTRING([Column 3],1,4) + '-' + SUBSTRING([Column 3],6,2) + '-' + SUBSTRING([Column 3],9,15)
只修复第5和第8个字符,不影响“.”。来自微秒的字符。 之后,您应该能够转换为日期时间。