SQL中如何将ddmmyy格式6位十进制数转换为YYYY-MM-DD日期格式
SQL实现6位ddmmyy格式数值转YYYY-MM-DD标准日期
核心处理逻辑共4步:
- 先将输入的6位数值转为定长6位字符串,补全可能丢失的前导零(比如数值
010223直接转字符串会变成10223,长度不足会解析失败) - 按照ddmmyy的规则拆分字符串:前2位为日期、中间2位为月份、最后2位为两位年份
- 为两位年份补全世纪前缀,通用业务规则一般是两位年份≤29时补
20、≥30时补19,可根据自身业务覆盖的年份范围调整阈值 - 将拆分得到的年、月、日组合为日期类型,最终格式化为
YYYY-MM-DD格式输出
以下是主流数据库的可直接运行的实现示例:
MySQL
-- 示例输入310322,输出结果为2022-03-31 SELECT DATE_FORMAT( STR_TO_DATE(LPAD(310322, 6, '0'), '%d%m%y'), '%Y-%m-%d' ) AS standard_date;
注意:MySQL中
%y占位符默认将00-69的两位年映射为2000-2069、70-99映射为1970-1999,如果业务年份规则和默认逻辑不符,不要直接用自动映射,手动截取两位年判断后拼接四位年再做转换即可。
PostgreSQL
SELECT TO_CHAR( TO_DATE(LPAD(310322::text, 6, '0'), 'DDMMYY'), 'YYYY-MM-DD' ) AS standard_date;
SQL Server
SELECT CONVERT( varchar(10), CONVERT(date, STUFF(STUFF(RIGHT('000000' + CAST(310322 AS varchar(6)),6),3,0,'.'),6,0,'.'), 4), 23 ) AS standard_date;
低版本SQL Server没有内置LPAD函数时,用
RIGHT('000000' + 字段值,6)的方式同样可以实现前导零补全。
通用避坑提示
- 转换前必须做合法性校验:输入值必须为6位数字、拆分出的月份在1-12区间、日期符合对应年月的合法天数范围,避免非法值转换报错或生成错误日期
- 涉及跨世纪的年份场景,不要依赖数据库默认的两位年映射规则,优先手动判断补全世纪前缀,避免出现年份偏差
- 如果输入字段为字符串类型,先过滤掉包含非数字字符的异常值再执行转换逻辑
内容的提问来源于stack exchange,提问作者Newbieone
相关产品推荐
相关产品推荐

