2012-02-01 16 views
15

私はカラムがmonthinteger)のテーブルを持っています。この列には、1, 2, .. 12のような値が格納されています。
しかし、私は月の名前をにする必要があります。PostgreSQLの番号から月の名前を取得

例: 値が1の場合は、janと表示する必要があります。

答えて

25

は、基本的にはすでに何を掲載@small_duckが、改善のカップル:

SELECT to_char(to_timestamp (4::text, 'MM'), 'TMmon') 
  • テキスト4::textに平野のキャストは、to_char(..)は必要十分ではありません。

  • 質問には、小文字の「jan」が尋ねられます。template patternmonです。

  • 出力をローカライズする場合は、テンプレートの前にmodifierTMと接頭辞を付けます。

6

は、迅速な答えがあるかもしれませんが、によって可能であるように思わ:

  • は、タイムスタンプの月を表示するタイムスタンプ
  • ように、その文字列を読み込み、文字列
  • にあなたのint型を回します。たとえば、

select to_char(to_timestamp(to_char(4, '999'), 'MM'), 'Mon') 

リターン '4月'。

あなたは機能にそれを回すことができます。

create function to_month(integer) returns varchar as 
$$ 
    select to_char(to_timestamp(to_char($1, '999'), 'MM'), 'Mon'); 
$$ language sql 

し、コード全体でそれを使用しています。

select to_month(month_column) from mytable 
+0

ありがとうございます。うまくいきました。 – user007

+0

ちょっと - なぜ非常によく似た実装が月の名前全体を正しく解釈するのが難しいのでしょうか? YEAR(DM.DATE)|| TO_CHAR(TO_TIMESTAMP(TO_CHAR( \t \t場合 \t \t \tとき \t \t \t \t月(DM.DATE)+1> 12それから1 \t \t \t \t他の月(DM.TM_DIM_KY_DTE)+1エンド \t \t \t、'99 ')、' MM ')、' Mon ') 目標は今年+今月の1ヶ月後だったので、2012年11月は2012年12月のように' 2012Dec 'にする必要があります。何らかの理由で、特定の文字がDec = 4ecまたはJan = 1721395anのように数値として返される – Phill

関連する問題