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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:45:51