1

我正在使用 Oracle 10。

我想从数据库中选择日期格式:

02<sup>nd</sup> November 2013

查询得到上述结果:

select
replace(
    replace(
        replace(
            replace(
                to_char(to_date('02-Nov-2013','dd-Mon-yyyy'),'ddth Month yyyy')
            ,'nd','<sup>nd</sup>')
        ,'st','<sup>st</sup>')
    ,'th','<sup>th</sup>')
,'Augu<sup>st</sup>','August')
from dual

上面的查询执行得很好。但它在输出之前添加了更多空格year,我得到的输出如下:(而不是一个空格,输出在一年之前包含两个空格)

02<sup>nd</sup> November__2013    //underscore denotes space

如果日期包含August月份,则输出包含四个空格,而不是一个。

02<sup>nd</sup> August____2013    //underscore denotes space

任何建议将不胜感激。

我找到了一种解决方案,但我仍然不确定为什么上面的查询会在输出中添加额外的空格。

select
regexp_replace(
  replace(
    replace(
      replace(
        replace(
          to_char(to_date('02-Aug-2013','dd-Mon-yyyy'),'ddth Month yyyy')
        ,'nd','<sup>nd</sup>')
      ,'st','<sup>st</sup>')
    ,'th','<sup>th</sup>')
  ,'Augu<sup>st</sup>','August')
,'[[:space:]][[:space:]]*',' ')
from dual
4

1 回答 1

3

最长的月份长度为 9。因此,所有月份都在右侧用空格填充以组成 9 个字符。

您可以指定fm格式模型来修剪空间。

to_char(to_date('04-May-2013','dd-Mon-yyyy'),'ddth fmMonth yyyy')
于 2013-11-02T09:28:10.217 回答