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

Node API传递含毫秒DateTime参数遇nvarchar转datetime超出范围错误

解决SQL Server datetime转换错误的问题

这个问题我碰到过,其实是你传递的日期格式和SQL Server的datetime类型要求不匹配导致的,咱们一步步拆解原因和解决办法:

错误的核心原因

你现在传递的日期字符串是2018-04-10%2020:00:00:1000,这里有几个关键问题:

  1. 毫秒分隔符错误:SQL Server的datetime类型要求毫秒和秒之间用**点(.)**分隔,而不是冒号(:),它识别的标准格式是YYYY-MM-DD HH:mm:ss.fff(fff代表三位毫秒)。
  2. 毫秒值超出范围:SQL Server的datetime毫秒部分只能是000-999的三位数字,你写的1000已经超出合法范围,这直接触发了转换失败。
  3. 额外隐患:你提到用date.format('MM/DD/YYYY HH:mm:ss:SSS')生成格式,把原来的YYYY-MM-DD改成了MM/DD/YYYY,这种格式在SQL Server中如果遇到13/01/2018这类“13月”的情况,也会触发“超出范围”错误——因为它默认会把MM/DD/YYYY解析为月-日-年,月份不能超过12。

具体解决步骤

1. 修正日期格式字符串

把生成日期的格式改成SQL Server能100%识别的标准格式:

  • 如果用moment.js:moment().format('YYYY-MM-DD HH:mm:ss.SSS'),生成结果类似2018-04-10 20:00:00.100
  • 如果用其他日期库,把格式字符串里的HH:mm:ss:SSS改成HH:mm:ss.SSS,同时保持日期部分为YYYY-MM-DD(这是ISO标准格式,不会有解析歧义)

2. 确保毫秒值合法

生成的毫秒部分必须是000-999之间的三位数字,比如100而不是1000——大部分日期库的SSS格式都会自动处理成合法的三位值,不用额外手动调整。

3. 正确的URL参数示例

调整后传递的URL参数应该是:

datetime=2018-04-10%2020:00:00.100

(空格URL编码后是%20,如果用ISO 8601的T分隔日期和时间,格式是2018-04-10T20:00:00.100,URL编码后为datetime=2018-04-10T20%3A00%3A00.100,这种格式更通用,推荐使用)

快速验证

你可以在SQL Server里直接测试两种格式的区别:

-- 正确格式,能正常转换
SELECT CONVERT(datetime, '2018-04-10 20:00:00.100')

-- 错误格式,会触发你遇到的报错
SELECT CONVERT(datetime, '2018-04-10 20:00:00:1000')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:45:21