web-dev-qa-db-fra.com

Rembourrage des zéros à gauche dans PostgreSQL

Je suis relativement nouveau dans PostgreSQL et je sais comment composer un nombre avec des zéros à gauche dans SQL Server, mais j'ai du mal à comprendre cela dans PostgreSQL.

J'ai une colonne de nombres où le nombre maximum de chiffres est 3 et le min est 1: si c'est un chiffre, il a deux zéros à gauche, et si c'est 2 chiffres, il y a 1, par exemple. 001, 058, 123.

Dans SQL Server, je peux utiliser les éléments suivants:

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

Cela n'existe pas dans PostgreSQL. Toute aide serait appréciée.

74
Ben

Vous pouvez utiliser les fonctions rpad et lpad pour insérer des nombres à droite ou à gauche, respectivement. Notez que cela ne fonctionne pas directement sur les nombres, vous devrez donc utiliser ::char ou ::text pour les lancer:

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
139
Mureinik

La fonction to_char() permet de formater des nombres:

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

Le préfixe fm ("mode de remplissage") évite les espaces de début dans le varchar résultant. Le 000 définit simplement le nombre de chiffres que vous souhaitez avoir.

 psql (9.3.5) 
 Tapez "aide" pour obtenir de l'aide. > valeurs (1), (11), (100) 
 postgres (>) 
 postgres-> select to_char (nr, 'fm000') 
 postgres-> parmi sample_numbers; 
 to_char 
 --------- 
 001 
 011 
 100 
 (3 rangées) 
 
 postgres =>

Pour plus de détails sur le format d'image, veuillez consulter le manuel:
http://www.postgresql.org/docs/current/static/functions-formatting.html

51

Aussi facile que

SELECT lpad(42::text, 4, '0')

Références:

sqlfiddle: http://sqlfiddle.com/#!15/d41d8/3665

11
zerkms