2012-02-01 11 views

Odpowiedz

25

Zasadniczo co @small_duck już pisał, ale kilka ulepszeń:

SELECT to_char(to_timestamp (4::text, 'MM'), 'TMmon') 
  • zwykły odlew do tekstu 4::text wystarczy, nie ma potrzeby to_char(..).

  • Pytanie dotyczy małej litery "jan", istnieje template pattern dla tego: mon.

  • Aby zlokalizować dane wyjściowe, należy przedrostkować szablon za pomocą modifierTM.

6

Nie może być szybsza odpowiedź, ale wydaje się być możliwe przez:

  • Włączanie int na ciąg
  • Czytając ten ciąg jako datownik
  • Wyświetlanie miesiąc znacznika czasu.

Na przykład:

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

zwraca 'kwiecień'.

można przekształcić go w funkcji:

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

i używać go w całym kodzie.

select to_month(month_column) from mytable 
+0

Dzięki, sir ... Działa dobrze. – user007

+0

Hej - jakikolwiek pomysł, dlaczego bardzo podobna implementacja miałaby trudności z prawidłową interpretacją nazwy całego miesiąca? ROK (DM.DATA) || To_char (TO_TIMESTAMP (to_char ( \t \t przypadku \t \t \t gdy \t \t \t \t miesięcy (DM.DATE) +1> 12 I 1 \t \t \t \t inny miesięcy (DM.TM_DIM_KY_DTE) +1 koniec \t \t \t, '99 '),' MM '),' Mon ') Celem było posiadanie bieżącego roku plus jeden miesiąc po bieżącym miesiącu, więc listopad 2012 powinien przypadać na grudzień 2012 jako "2012Dec". Z jakiegoś powodu niektóre litery są zwracane jako liczby takie jak Dec = 4ec lub Jan = 1721395an – Phill