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

如何用TSQL将短年份日期字符串'31/12/18'转为DATE类型?

在TSQL中正确转换带短年份的日期字符串为DATE类型的方法

这个问题我之前也碰到过,咱们先搞清楚错误原因:你用的格式代码103对应的是dd/mm/yyyy(四位年份)的日期格式,但你的输入字符串'31/12/18'是两位年份,SQL Server没办法按照指定的四位年份格式去解析,所以才会抛出转换失败的错误。

下面是几种可行的解决方法:

方法一:使用匹配两位年份的格式代码

TSQL里有专门对应两位年份的格式代码,比如代码3就对应dd/mm/yy格式,直接用它来转换就没问题:

SELECT CONVERT(DATE, '31/12/18', 3) AS rDatum;

执行后会得到2018-12-31,这里要注意SQL Server默认的两位年份解析规则:00-49会被解析为2000-2049,50-99会被解析为1950-1999,所以18会自动对应2018年。

如果你的日期字符串是其他两位年份格式,比如:

  • mm/dd/yy对应格式代码1或101
  • yy/mm/dd对应格式代码2或102
    根据实际格式选对应的代码就行。

方法二:用TRY_CONVERT做容错处理

如果不确定输入的日期字符串是否总是符合格式,推荐用TRY_CONVERT替代CONVERT,它在转换失败时会返回NULL而不是直接抛出错误,更友好:

SELECT TRY_CONVERT(DATE, '31/12/18', 3) AS rDatum;

方法三:调整全局两位年份截止值(不推荐)

如果你的业务需要修改短年份的解析规则(比如想让18对应1918而不是2018),可以修改服务器的two digit year cutoff配置,但这是全局设置,会影响所有相关的日期转换,除非有特殊需求,不建议这么做。示例代码:

sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'two digit year cutoff', 1918; -- 设置截止年份为1918,00-18对应1900-1918,19-99对应2019-2099
RECONFIGURE;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:05:58