You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中DATEADD()传入字符串参数精度超毫秒时转换失败问题

现象原因解析

核心原因是SQL Server的隐式类型转换规则差异,具体可以拆解为三点说明:

  • 直接传入字符串字面量作为DATEADD参数时,SQL Server默认会将字符串尝试隐式转换为datetime类型。datetime类型的秒精度只支持到小数点后3位(最高精度为3.33毫秒),你传入的'2021-11-01 05:10:00.0000000'带有7位小数的纳秒精度,不符合datetime类型的格式要求,因此抛出转换失败错误。

Msg 241, Level 16, State 1, Line 1
从字符串转换日期和/或时间时,转换失败。

  • 当传入的时间字符串只有3位毫秒精度时,完全匹配datetime类型的格式要求,隐式转换成功,因此DATEADD可以正常执行并返回结果。
  • 针对表中纳秒精度的时间字段调用DATEADD不会报错,是因为这类字段本身已经是datetime2类型(SQL Server中支持纳秒精度的日期类型),不存在字符串转日期类型的隐式转换步骤,且DATEADD本身原生支持datetime2类型作为入参,因此可以正常运算。

解决方案

如果需要使用纳秒精度的字符串字面量作为参数,主动显式转换为datetime2类型即可:

SELECT DATEADD(HOUR,4, CAST('2021-11-01 05:10:00.0000000' AS datetime2))

内容的提问来源于stack exchange,提问作者Shmiel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:45:03