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

SQL Server将varchar类型日期转换为datetime时出现超出范围错误如何解决

问题原因

你存储的日期字符串格式为dd-mm-yyyy(日-月-年),SQL Server默认的日期解析规则会优先按照当前会话的语言设置识别格式,通常默认将前两位识别为月份,21超出了月份1-12的取值范围,因此触发转换错误。

解决方案
  • 方法1:使用带格式参数的CONVERT函数
    显式指定输入字符串的日期格式为105(对应dd-mm-yyyy格式),修改SQL如下:
    select convert(datetime, process_date, 105) dt 
    from cardx1 
    
  • 方法2:使用TRY_CONVERT兼容脏数据(适用于SQL Server 2012及以上版本)
    如果字段中存在不符合格式的脏数据,TRY_CONVERT会将非法值返回为NULL,不会中断整个查询,也可以用来快速定位脏数据:
    -- 转换查询,非法日期返回NULL
    select try_convert(datetime, process_date, 105) dt 
    from cardx1 
    
    -- 排查脏数据语句
    select process_date 
    from cardx1 
    where try_convert(datetime, process_date, 105) is null
    
  • 长期优化方案
    建议直接将process_date字段的类型修改为DATE或DATETIME类型,从存储层面避免字符串格式错误、取值超出范围等问题,也能提升日期查询、计算的效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:33:01