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。次のような出力が得られます:(出力には年の前に1つのスペースではなく2つのスペースが含まれます)

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

また、日付にAugust月が含まれる場合、出力には 1 つではなく 4 つのスペースが含まれます。

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

任意の提案をいただければ幸いです。

私は1つの解決策を見つけましたが、上記のクエリが出力に余分な空白を追加している理由はまだわかりません.

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 に答える