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

SQL Server中荷兰式Varchar日期转换问题(日被误判为月份报错)

解决Varchar类型日期时间转换为Datetime的问题

这个问题我之前也碰到过,核心原因是你的字符串日期格式是日-月-年 时间(比如13-04-2018 1:05:00),而SQL Server默认会按美国式的月-日-年格式解析,把13当成月份自然就会超出范围报错。下面给你几个可行的解决方案:

方案1:用CONVERT指定正确的Style参数

SQL Server的CONVERT函数支持通过第三个参数指定日期格式的style代码,针对dd-MM-yyyy HH:mm:ss这种格式,我们可以使用style 105(对应意大利式日期格式dd-mm-yyyy),函数会自动识别后面的时间部分:

SELECT CONVERT(DATETIME, '13-04-2018 1:05:00', 105) AS ConvertedDateTime;

执行后会返回你需要的2018-04-13 01:05:00格式的datetime类型值。

方案2:用TRY_CONVERT处理异常数据

如果你的数据库里存在格式不规范的日期字符串(比如某天的日/月超出范围),直接用CONVERT会抛出错误中断查询。这时可以用TRY_CONVERT,它会在转换失败时返回NULL而不是报错,更适合批量处理数据:

SELECT TRY_CONVERT(DATETIME, '13-04-2018 1:05:00', 105) AS SafeConvertedDateTime;

你还可以搭配ISNULL或COALESCE给转换失败的记录设置默认值,比如:

SELECT ISNULL(TRY_CONVERT(DATETIME, YourDateColumn, 105), GETDATE()) AS FinalDateTime
FROM YourTableName;

方案3:用PARSE/TRY_PARSE指定文化解析

如果觉得style代码不好记,也可以用PARSE函数,通过指定文化区域来明确日期格式。比如法国(fr-FR)、德国(de-DE)等地区都是采用日-月-年的日期格式:

SELECT PARSE('13-04-2018 1:05:00' AS DATETIME USING 'fr-FR') AS ParsedDateTime;

同样,为了处理异常数据,使用TRY_PARSE:

SELECT TRY_PARSE('13-04-2018 1:05:00' AS DATETIME USING 'fr-FR') AS SafeParsedDateTime;

注意事项

  • 确保你的日期字符串格式是统一的dd-MM-yyyy HH:mm:ss,如果存在单数字日/月(比如3-4-2018)或者12小时制带AM/PM的情况,需要调整对应的style或文化参数。
  • 如果你使用的是SQL Server 2012及以上版本,TRY_CONVERT和TRY_PARSE才支持,低版本请优先使用CONVERT配合数据校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:31:45