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;

结果:

在此处输入图像描述

所以,我的问题是如何删除月年和月日之间的空间。我用了

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;

但前导零消失了。

4

2 回答 2

23

看起来您不想添加前导零,看起来您没有完全按照您想要的方式将日期转换为字符。TO_CHAR()的日期时间格式模型非常强大,充分利用它。

select to_char(dt, 'yyyymmdd') as dayid
  from atm_facts

要真正回答您的问题,您可以使用带有 TO_CHAR() 的数字格式模型来填充前导。

例如,以下返回006

select to_char(6, 'fm009') from dual;

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

于 2013-05-16T11:00:52.800 回答
2

t.Dt 是日期吗?您可以在一个to_char语句中格式化它们:

to_char(t.Dt, 'YYYYMMDD')
于 2013-05-16T11:02:12.043 回答