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

MSSQL中Varchar转Datetime超出范围报错,不同环境表现异常求助

问题分析与解决建议

你遇到的这个错误,核心原因是SQL Server实例的日期格式/语言设置差异导致字符串转datetime时失败,具体来说:

为什么会报错?

你的查询里用了'14/05/2018 00:00:00'这种日/月/年格式的字符串,但当前运行查询的SQL Server实例默认的日期解析规则是月/日/年(比如美式英语设置),这时候它会把14当成月份,而月份最大是12,自然就触发了"varchar转datetime超出范围"的错误。

而你的SQLExpress克隆库能正常运行,是因为那个实例的语言/日期格式设置是支持日/月/年的(比如英式英语、中文等区域设置),所以解析14/05/2018时会正确识别为2018年5月14日。

可能的具体差异点

  • 服务器层面的语言设置:两个实例的默认语言不同,比如生产实例是us_english,而Express实例是British或Chinese。
  • 会话层面的日期格式设置:可能你在Express里运行过SET DATEFORMAT dmy;之类的语句,或者会话默认格式不同。
  • 数据库的兼容级别或区域设置:虽然概率较低,但部分数据库级别的设置也可能影响日期解析。

解决办法(推荐按优先级来)

  1. 使用无歧义的日期字符串格式:这是最稳妥的方式,不管实例设置如何都能正确解析,比如:
    • ISO 8601格式:'2018-05-14T00:00:00'
    • 未分隔的数字格式:'20180514'(日期部分)
      修改后的查询可以写成:
    Select Time from Flights where Time <= DATEADD(day,3,'2018-05-14T00:00:00') AND Time >= getdate()
    
  2. 显式指定日期格式:在查询开头加上日期格式设置语句,强制SQL Server按日/月/年解析:
    SET DATEFORMAT dmy;
    Select Time from Flights where Time <= DATEADD(day,3,'14/05/2018 00:00:00') AND Time >= getdate()
    
  3. 修改实例默认语言/日期格式:如果是长期需求,可以修改SQL Server实例的默认语言,但这个操作需要管理员权限,且会影响所有会话,需谨慎操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:15:19