如何用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或101yy/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
相关产品推荐
相关产品推荐

