SQL Server中CONVERT函数无法将字符串转为DATETIME的问题
问题原因与解决方案
错误原因
SQL Server的DATETIME类型仅支持最多3位毫秒小数,而你的字符串包含7位小数(2021-07-19 14:00:39.0000000),超出了DATETIME的精度范围,导致转换失败。
解决方案
1. 使用支持高精度的DATETIME2类型(推荐)
DATETIME2支持0-7位小数,直接转换即可:
DECLARE @eh NVARCHAR(MAX) = '2021-07-19 14:00:39.0000000' SELECT CONVERT(DATETIME2, @eh)
2. 截断小数部分适配DATETIME
如果必须使用DATETIME,可以截断字符串到3位小数或去掉小数部分:
-- 截断到3位小数 DECLARE @eh NVARCHAR(MAX) = '2021-07-19 14:00:39.0000000' SELECT CONVERT(DATETIME, LEFT(@eh, 23)) -- 去掉小数部分 SELECT CONVERT(DATETIME, LEFT(@eh, 19))
3. 用TRY_CONVERT避免报错
如果需要容错,TRY_CONVERT会在转换失败时返回NULL而非抛出错误:
DECLARE @eh NVARCHAR(MAX) = '2021-07-19 14:00:39.0000000' SELECT TRY_CONVERT(DATETIME, @eh) -- 转换失败返回NULL SELECT TRY_CONVERT(DATETIME2, @eh) -- 成功返回高精度日期
内容的提问来源于stack exchange,提问作者MidTown
相关产品推荐
相关产品推荐

