【问题标题】:How can I add leading zeros to dates in Oracle?如何在 Oracle 中将前导零添加到日期?
【发布时间】:2013-05-16 10:56:28
【问题描述】:

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

我的尝试:

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;

但前导零消失了。

【问题讨论】:

  • 我真的不明白你是否想要或不想要零,但你是否不知道,也许像select to_number(replace(to_char(t.Dt,'DS'),'/','')) from dual

标签: sql oracle oracle11g


【解决方案1】:

您似乎不想添加前导零,您似乎没有完全按照您想要的方式将日期转换为字符。 TO_CHAR() 的datetime format model 非常强大,充分利用它。

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

要真正回答您的问题,您可以使用带有 TO_CHAR() 的 number format model 来填充前导 's。

例如,以下返回006

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

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

【讨论】:

  • @Zane - 接受有助于解决问题的答案是有礼貌的。
  • 我建议阅读链接文档@zane,24 小时制的日期时间格式模型是hh24,一分钟是mi,所以to_char(dt, 'hh24mi')
  • @BobJarvis,感谢您的评论...我正要这样做
  • to_char 不是解决方案,因为它添加了前导空格。这里提到了一个解决方案:stackoverflow.com/questions/23814518/…
  • 不再是@Wouter,问题可能是关于日期的问题,但它仍然与数字完全相关,并且已经回答了数字......
【解决方案2】:

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

to_char(t.Dt, 'YYYYMMDD')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-06
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    相关资源
    最近更新 更多