Azure SQL Server中如何将yy/mm/dd格式varchar转换为date类型
问题原因
- 你的原SQL存在两处逻辑错误:
- 内层
CONVERT(varchar, '99/01/30', 11)的使用逻辑错误:格式码参数仅在日期类型转字符串时生效,字符串转字符串时格式码不会生效,执行后输出的仍是原始值99/01/30 - 外层转换使用格式码23(对应格式为
yyyy-mm-dd),和输入的yy/mm/dd格式不匹配,因此触发转换失败报错
- 内层
正确实现方案
方案1:直接使用匹配的格式码转换(推荐)
格式码11正好对应yy/mm/dd的输入格式,且Azure SQL默认两位数年份分界值为2049(年份≥50判定为19XX,<50判定为20XX),刚好符合你的99/01/30转1999-01-30的需求:
SELECT CONVERT(DATE, '99/01/30', 11) AS converted_date;
方案2:自定义世纪判定规则
如果你的业务场景对两位数年份的世纪判定有自定义需求,可手动拼接世纪前缀后转换:
SELECT CONVERT(DATE, -- 可自定义调整世纪判定逻辑,示例为≥50归19世纪,<50归21世纪 CASE WHEN LEFT('99/01/30', 2) >= '50' THEN '19' ELSE '20' END + '99/01/30', 111) AS converted_date;
这里使用的格式码111对应yyyy/mm/dd的输入格式。
内容的提问来源于stack exchange,提问作者A_M_2020
相关产品推荐
相关产品推荐

