MS SQL Server yyyy-mm-dd日期格式颠倒解析异常配置问题咨询
问题根源
这是SQL Server的**DATEFORMAT(日期解析顺序)配置继承了德语版操作系统的区域规则**导致的问题,具体逻辑如下:
- 德语地区的默认日期顺序为
日-月-年,德语版Windows 10的系统区域短日期格式默认遵循该规则,SQL Server安装时会默认继承系统区域设置,将全局/会话默认的DATEFORMAT参数设为dmy。 - 你使用的带分隔符的
yyyy-mm-dd格式并非SQL Server datetime类型的区域安全格式:只有无分隔符的yyyyMMdd、带ISO 8601标记的yyyy-MM-ddTHH:mm:ss两种格式完全不受DATEFORMAT影响,普通带横杠/斜杠的日期字符串都会按当前DATEFORMAT规则解析。 - 你遇到的现象完全符合
dmy规则的解析逻辑:2021-17-05会被解析为「2021年、第5个月、第17天」,日期合法所以能正常执行2021-05-17会被尝试解析为「2021年、第17个月、第5天」,月份超出1-12的合法范围所以报错/无结果
另外注意你示例SQL中存在语法错误:WHERE 'dbo.Messwerte.datetime' = 'xxx'给列名加了单引号,实际是字符串和字符串的比较,而非过滤表字段,需要去掉列名的单引号,改为WHERE [DateTime] = 'xxx'。
解决方案
- 临时会话生效:执行SQL命令
SET DATEFORMAT ymd;即可让当前会话的日期解析顺序改为年-月-日。 - 全局生效:打开SSMS→右键服务器名称选择「属性」→「高级」选项卡→修改「默认语言」为中文/英文(对应
DATEFORMAT为ymd),修改后重启SQL Server服务生效。 - 永久规避方案:所有日期字符串统一使用区域安全格式,比如
'20210517',或者显式用CONVERT指定格式:CONVERT(DATETIME, '2021-05-17', 23),23为yyyy-mm-dd对应的格式代码。
内容的提问来源于stack exchange,提问作者Adhome
相关产品推荐
相关产品推荐

