2014-10-15 52 views
41

Sono relativamente nuovo a PostgreSQL e so come eseguire il pad di un numero con zeri a sinistra in SQL Server, ma non riesco a capirlo in PostgreSQL.Riempimento di zeri a sinistra in postgreSQL

Ho una colonna numerica in cui il numero massimo di cifre è 3 e il min è 1: se è una cifra ha due zeri a sinistra e se è 2 cifre ne ha 1, ad es. 001, 058, 123.

In SQL Server è possibile utilizzare il seguente:

RIGHT('000' + cast([Column1] as varchar(3)), 3) as [Column2] 

questo non esiste in PostgreSQL. Qualsiasi aiuto sarebbe apprezzato.

+0

Pro suggerimento: se si mette le esatte titolo della domanda "zeri imbottitura a sinistra in PostgreSQL" http: // google.com vedrai tonnellate di risultati rilevanti. – zerkms

+1

L'utilizzo di google è * esattamente * come ho trovato questa pagina. Era il mio risultato numero uno di Google. – Jason

+0

Possibile duplicato della funzione [to \ _char (numero) in postgres] (https://stackoverflow.com/questions/14155656/to-charnumber-function-in-postgres) –

risposta

77

Offriamo le rpad e lpad funzioni a pad numeri a destra o a sinistra, rispettivamente. Si noti che questa non funziona direttamente sui numeri, quindi dovrete usare ::char o ::text di gettare loro:

SELECT RPAD(numcol::text, 3, '0'), -- Zero-pads to the right up to the length of 3 
     LPAD(numcol::text, 3, '0'), -- Zero-pads to the left up to the length of 3 
FROM my_table 
+1

Questa è una risposta orribile rispetto a quella di seguito di @a_horse_with_no_name https://stackoverflow.com/a/26379893/124486 –

+1

@EvanCarroll questa è la risposta giusta- di cosa stai parlando? – Yarin

+0

@Yarin [questa risposta] (https://stackoverflow.com/a/26379893/124486) è il metodo di chiamata a una funzione standardizzato con stringhe di formato. Usando RPAD/LPAD ti stai convertendo in stringhe e poi elaborando le stringhe. Usando to_char, stai solo specificando un metodo diverso per la stringa. –

28

La funzione to_char() è lì per formattare i numeri:

select to_char(column_1, 'fm000') as column_2 
from some_table; 

Il fm prefisso ("modalità riempimento") evita gli spazi iniziali nel varchar risultante. Il 000 definisce semplicemente il numero di cifre che si desidera avere.

 
psql (9.3.5) 
Type "help" for help. 

postgres=> with sample_numbers (nr) as (
postgres(>  values (1),(11),(100) 
postgres(>) 
postgres-> select to_char(nr, 'fm000') 
postgres-> from sample_numbers; 
to_char 
--------- 
001 
011 
100 
(3 rows) 

postgres=>

Per maggiori dettagli sul formato immagine, si prega di consultare il manuale:
http://www.postgresql.org/docs/current/static/functions-formatting.html

Problemi correlati