Ho una tabella con una colonna month
(integer
). In questa colonna memorizzo valori come 1, 2, .. 12
.
Ma devo mostrare il mese nome.Ottieni il nome del mese dal numero in PostgreSQL
Es: Se il valore è 1
Devo visualizzare jan
.
Ho una tabella con una colonna month
(integer
). In questa colonna memorizzo valori come 1, 2, .. 12
.
Ma devo mostrare il mese nome.Ottieni il nome del mese dal numero in PostgreSQL
Es: Se il valore è 1
Devo visualizzare jan
.
Fondamentalmente ciò @small_duck già pubblicato, ma un paio di miglioramenti:
SELECT to_char(to_timestamp (4::text, 'MM'), 'TMmon')
Un cast pianura al testo 4::text
è sufficiente, non c'è bisogno per to_char(..)
.
Domanda per minuscolo "jan", c'è un template pattern per quello: mon
.
Se si desidera localizzare l'output, aggiungere il prefisso al modello con modifierTM
.
Ci potrebbe essere una risposta più veloce, ma sembra essere possibile:
Ad esempio:
select to_char(to_timestamp(to_char(4, '999'), 'MM'), 'Mon')
restituisce 'Aprile'.
È possibile trasformarlo in una funzione:
create function to_month(integer) returns varchar as
$$
select to_char(to_timestamp(to_char($1, '999'), 'MM'), 'Mon');
$$ language sql
e usarlo in tutto il codice.
select to_month(month_column) from mytable
Grazie signore .. Funziona bene. – user007
Ehi - qualche idea sul perché un'implementazione molto simile avrebbe difficoltà a interpretare correttamente il nome del mese intero? ANNO (DM.DATE) || TO_CHAR (TO_TIMESTAMP (to_char ( \t \t caso \t \t \t quando \t \t \t \t mese (DM.DATE) +1> 12 allora 1 \t \t \t \t altro mese (DM.TM_DIM_KY_DTE) +1 estremità \t \t \t, '99 '),' MM '),' Mon ') L'obiettivo doveva avere l'anno corrente più un mese dopo il mese corrente, quindi Nov 2012 dovrebbe essere dicembre 2012 come' 2012Dec '. Per qualche ragione alcune lettere vengono restituite come numeri come Dec = 4ec o Jan = 1721395an – Phill