Mam tabelę z kolumną month
(integer
). W tej kolumnie przechowuję wartości takie jak 1, 2, .. 12
.
Ale muszę pokazać miesiąc nazwa.Uzyskaj nazwę miesiąca z numeru w PostgreSQL
Przykład: Jeśli wartość wynosi 1
, należy wyświetlić jan
.
Mam tabelę z kolumną month
(integer
). W tej kolumnie przechowuję wartości takie jak 1, 2, .. 12
.
Ale muszę pokazać miesiąc nazwa.Uzyskaj nazwę miesiąca z numeru w PostgreSQL
Przykład: Jeśli wartość wynosi 1
, należy wyświetlić jan
.
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
.
Nie może być szybsza odpowiedź, ale wydaje się być możliwe przez:
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
Dzięki, sir ... Działa dobrze. – user007
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