如何将DDDYYYY格式日期转换为MM/DD/YYYY等标准日期格式?
解决DDDYYYY年积日格式转换为标准日期的问题
你现在的问题核心是**to_date的格式参数和输入字符串不匹配**——你把数字1112018转成字符串后是'1112018',它对应的格式是年积日+年份(也就是'DDDYYYY'),但你却用了'MM/DD/YYYY'来解析,Oracle自然无法正确识别。正确的思路是先把年积日字符串解析成日期,再转换成你想要的标准格式。
正确转换步骤
- 把数字类型的DDDYYYY值转为字符串(如果本身就是字符串可跳过);
- 用
to_date()函数,指定格式掩码'DDDYYYY'解析成日期类型; - 再用
to_char()函数将日期转换成目标格式,比如'Mon-DD-YYYY'(即你举例的Feb-02-2014风格)或'MM/DD/YYYY'。
示例代码
如果你想要Mon-DD-YYYY格式:
SELECT to_char(to_date(to_char(1112014), 'DDDYYYY'), 'Mon-DD-YYYY') AS formatted_date FROM dual;
执行后会返回Apr-21-2014(补充说明:你例子里的Feb-02-2014对应的是2014年的第33天,输入应该是0332014)。
如果需要MM/DD/YYYY格式:
SELECT to_char(to_date(to_char(1112018), 'DDDYYYY'), 'MM/DD/YYYY') AS formatted_date FROM dual;
这个会返回04/21/2018。
额外提示
- 如果你的输入本身就是字符串类型(比如
'1112014'),可以直接写to_date('1112014', 'DDDYYYY'),不需要额外转字符串; DDD是Oracle日期格式中的年积日掩码,范围是001到366,Oracle会自动处理闰年的日期计算。
内容的提问来源于stack exchange,提问作者John Wick
相关产品推荐
相关产品推荐

