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

SQL Server升级后同排序规则下日期解析差异问题求助

SQL Server 2019升级后日期解析异常排查

问题背景

我们开发的适配SQL Server的细分行业软件,在客户将SQL Server从2014(Version12)升级到2019(Version15)后出现日期解析问题。最初怀疑服务器排序规则不符,调整后客户服务器与内部测试服务器均采用Latin1_General_CI_AS排序规则,但问题仍未解决。

测试脚本及现象

测试脚本1

declare @x1 as datetime
set @x1 = '20231231'
--set @x1 = '2023-12-31'
--set @x1 = '12.31.2023'

select @x1
  • '20231231'格式在两台服务器均能正常解析
  • '2023-12-31'和'12.31.2023'仅在客户服务器可正常解析,内部测试服务器解析失败

测试脚本2

DECLARE @T1 AS DATE
DECLARE @T2 AS DATE
DECLARE @T3 AS DATE
DECLARE @T4 AS DATE

DECLARE @nT1 AS VARCHAR(10)
DECLARE @nT2 AS VARCHAR(10)
DECLARE @nT3 AS VARCHAR(10)
DECLARE @nT4 AS VARCHAR(10)

set @nT1 = '2023-10-24'
set @nT2 = '20231024'
set @nT3 = '24.10.2023'
set @nT4 = '2023.10.24'

set @T1 = cast(@nT1 as date)
set @T2 = cast(@nT2 as date)
set @T3 = cast(@nT3 as date)
set @T4 = cast(@nT4 as date)

select @t1, @t2, @t3, @t4, @nt1, @nt2, @nt3, @nt4
  • 该脚本在内部测试服务器可正常执行
  • 客户服务器无法转换@T3对应的'24.10.2023'格式

注:当前存储过程参数采用VARCHAR类型定义,暂时无法修改。

排查方向

问题根源并非排序规则,而是SQL Server的语言/区域会话设置,日期解析逻辑依赖于当前会话的语言对应的日期格式模板,而非仅服务器排序规则:

  1. 对比两台服务器的默认语言:执行SELECT @@LANGUAGE,确认输出是否一致
  2. 检查会话级日期格式设置:执行SELECT DATEFORMAT,查看两台服务器的日期格式(如DMY/MDY/YMD)差异
  3. 确认服务器级默认语言配置:执行sp_configure 'default language',检查默认语言ID是否相同
  4. 排查SQL Server版本行为差异:2019对日期格式解析的严格性可能有调整,比如默认启用的严格日期校验规则不同

临时解决方案(无需修改参数类型)

在存储过程中显式指定日期格式,或使用CONVERT函数指定固定样式号:

-- 方法1:显式设置日期格式为日.月.年
SET DATEFORMAT DMY;
SET @T3 = CAST(@nT3 AS DATE);

-- 方法2:使用CONVERT指定样式号(104对应dd.mm.yyyy格式)
SET @T3 = CONVERT(DATE, @nT3, 104);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:35:08