查询在月份名称后添加空格

时间:2013-11-02 08:51:47

标签: sql oracle

我使用的是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

1 个答案:

答案 0 :(得分:3)

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

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

to_char(to_date('04-May-2013','dd-Mon-yyyy'),'ddth fmMonth yyyy')