使用 to_char 函数解析为字符串时,如何从 Oracle 中的日期和月份值中删除前导零?

Posted

技术标签:

【中文标题】使用 to_char 函数解析为字符串时,如何从 Oracle 中的日期和月份值中删除前导零?【英文标题】:How to remove leading zeroes from day and month values in Oracle, when parsing to string using to_char function? 【发布时间】:2014-04-28 10:49:08 【问题描述】:

我想在 select 语句中检索日期和月份值前面没有前导零的日期。如果我执行以下查询

 select to_char(sysdate, 'dd.mm.yyyy') from dual;

结果我会得到 21.03.2014。此外,例如,如果今天是 2014 年 3 月 7 日,我会得到 07.03.2014。我怎样才能摆脱这些前导零?

【问题讨论】:

我在 2016 年 1 月 11 日 4:38 与 Doug S 达成了一致:我只能让 'fm' 在字符串中存在一次,例如:to_char(sysdate--20,'fmMM.DD .YY')。否则,我收到“1.03.14”作为答案显示 【参考方案1】:
select   to_char(sysdate,'DD.MM.YY') -- Without Fill Mode
,        to_char(sysdate-20,'fmDD.fmMM.YY')  -- With Fill Mode, 20 days ago
  from dual;

返回

21.03.14    | 1.3.14

FM 填充模式。

在 TO_CHAR 函数的日期时间格式元素中,此修饰符在日期格式模型中抑制后续字符元素(例如 MONTH)中的空白并抑制后续数字元素(例如 MI)中的前导零。如果没有 FM,字符元素的结果总是用空格向右填充到固定长度,并且总是为数字元素返回前导零。使用抑制空白填充的 FM,返回值的长度可能会有所不同。

【讨论】:

FWIW,它也适用于 PostreSQL (minus sysdate)。 我只能让'fm'在字符串中存在一次,例如:to_char(sysdate--20,'fmmM.DD.YY')。否则,我收到了“1.03.14”的答案。 @DougS 那是因为fm 就像一个切换开关。请注意,描述中说“抑制后续元素的前导零”。如果您使用fmMM.DDfm.YY,您将删除月份和日期中的零,但不会删除年份(不是说年份可能有前导零,但如果您在格式化字符串中包含时间,这可能更相关) . 据我所见,它并没有像你的例子那样工作——它看起来更像是一个开关(如@SnoringFrog)写的;如果您将fm 放在MM 之前,月份仍会以前导零显示,所以我想应该编辑该示例。 HH: MM 与日期相关联可以做同样的事情吗?【参考方案2】:

试试这个:

select to_char(to_date('20-oct-2000'),'fmmm/dd/fmrr') from dual

上述查询将删除 Oracle 中日期和月份值的前导零。

【讨论】:

【参考方案3】:

这远非优雅,但它确实有效:

select to_number(to_char(sysdate,'dd')) || '.' || to_number(to_char(sysdate,'mm')) || '.' || to_number(to_char(sysdate,'yyyy')) from dual

基本上,您可以将日期的每个部分转换为数字

【讨论】:

以上是关于使用 to_char 函数解析为字符串时,如何从 Oracle 中的日期和月份值中删除前导零?的主要内容,如果未能解决你的问题,请参考以下文章

delphi 格式转换

是否可以创建一个自动将 SQL 值从日期转换为字符串的函数?

oracle to_char函数使用

to_char()的用法

Oracle之to_char

如何在 nvl() 中使用 to_char