繁体   English   中英

约会时间! 从字符串转换日期和/或时间时转换失败

[英]Datetime! Conversion failed when converting date and/or time from character string

我尝试将带有时间戳的列从nvarchar转换为datetime (因为我不确定通过将 Excel 导出到 SQL Server,时间戳内的精度不会丢失),但该列仍然无法转换,显示相同的错误时间

从字符串转换日期和/或时间时转换失败 - 转换

我试过

alter table X 
    alter column [Timestamp] datetime

我也试过:

convert(datetime, [Timestamp], 103)
try_convert(datetime, [Timestamp], 103)
cast ([Timestamp] as datetime)

仍然没有进展。

这是列中的示例数据:

2019-02-13-13.01.05.6100000015
2019-02-18-13.10.46.4850000015

能否请你帮忙?

你可以试试这个:

select 
    try_convert(datetime2(7), 
                 STUFF(STUFF(REPLACE('2019-02-18-13.10.46.485000015','.',':'), 11, 1, ' '),20,1,'.')
               ,121)

最好将类型更改为DATETIME2,因为它比 DATETIME 具有更高的精度。

首先将时间戳字符串的格式更改为可以毫无问题地转换为DATETIME2的格式。

UPDATE X
SET [Timestamp] = CONCAT(LEFT([Timestamp],10), 'T', REPLACE(SUBSTRING([Timestamp],12,8),'.',':'),  '.', SUBSTRING([Timestamp],21,9))
WHERE [Timestamp] LIKE '[12][0-9][0-9][0-9]_[01][0-9]_[0-3][0-9]_[0-2][0-9].[0-6][0-9].[0-6][0-9].[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%';

然后仔细检查是否还有一些不能按原样投射。

SELECT COUNT(*) Errors, MAX([Timestamp]) Example
FROM X
WHERE TRY_CAST([Timestamp] AS DATETIME2) IS NULL;

如果计数为 0,则可以更改列的类型。

ALTER TABLE X 
  ALTER COLUMN [Timestamp] DATETIME2(7);

这里对 reextester 进行测试

请注意,会丢失一些精度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM