如何在Oracle中给日期添加前导零?

11

如果一个数字少于两位数,我需要在其前面添加前导零,并将两个这样的数字组合成一个,它们之间没有空格。

select ( extract (year from t.Dt)
         || to_char(extract (month from t.Dt),'09')
         || to_char(extract (day from t.Dt),'09') ) as dayid 
  from ATM_FACTS t;

结果:

enter image description here

我的问题是如何去掉月份-年份和月份-日期之间的空格。我使用了

select ( extract (year from t.Dt)
         || to_number(to_char(extract (month from t.Dt),'09'))
         || to_number(to_char(extract (day from t.Dt),'09')) ) as dayid 
  from ATM_FACTS t;

但是前导零会消失。


我不是很明白你是否需要零,但如果不需要的话,可以尝试使用以下代码:select to_number(replace(to_char(t.Dt,'DS'),'/','')) from dual - haki
2个回答

23

看起来你不想添加前导零,而是希望按照你想要的方式将日期转换为字符。TO_CHAR()的日期格式模型非常强大,充分利用它。

select to_char(dt, 'yyyymmdd') as dayid
  from atm_facts
为了回答你的问题,你可以使用数字格式模型和TO_CHAR()来填充前导0。
例如,以下内容返回006
select to_char(6, 'fm009') from dual;

您可以使用在上述文档中提到的格式模型修饰符fm,以去除必要时的前导空格。


@Zane - 接受那些帮助你解决问题的答案是有礼貌的。 - Bob Jarvis - Слава Україні
我建议阅读链接的文档@zane,24小时制的日期时间格式模型是hh24,分钟是mi,因此to_char(dt,'hh24mi') - Ben
@BobJarvis,感谢您的评论...我正要这样做。 - Jivan
to_char不是解决方案,因为它会添加前导空格。解决方案在这里提到:https://dev59.com/pWAg5IYBdhLWcg3wQo9X - Wouter
1
不再是这样了,@Wouter,虽然问题可能在问日期,但它仍然完全适用于数字,并已经针对数字进行了回答... - Ben

2
t.Dt是一个日期吗?您可以在单个to_char语句中格式化它们:
to_char(t.Dt, 'YYYYMMDD')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接