2012-02-01 23 views

risposta

25

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.

6

Ci potrebbe essere una risposta più veloce, ma sembra essere possibile:

  • Trasformare il vostro int in una stringa
  • lettura che stringa come un timestamp
  • Visualizzazione mese del timestamp.

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 
+0

Grazie signore .. Funziona bene. – user007

+0

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

Problemi correlati