1
votes

Remplissage SQL 0 à gauche d'un nombre dans la chaîne

Je suis un débutant en langage SQL et j'utilise postgre sql et je fais de petits exercices pour apprendre. J'ai une colonne de chaînes nommée acronyme d'une table de destination:

 DO01
 ES01
 ES02
 FR01
 FR02
 FR03
 FR04
 FR05
 FR06
 FR07
 FR08
 FR09
 FR10
 GP01
 GP02
 IN01
 IN02
 MU01
 RU01
 TR01
 UA01

Je voudrais ajouter un zéro de remplissage pour les numéros d'acronyme qui n'ont qu'un seul chiffre, sortie:

 DO1
 ES1
 ES2
 FR1
 FR10
 FR2
 FR3
 FR4
 FR5
 FR6
 FR7
 FR8
 FR9
 GP1
 GP2
 IN1
 IN2
 MU1
 RU1
 TR1
 UA1

Comment puis-je accéder à la gauche du premier nombre de la chaîne? Il y a une expression régulière je pense mais je ne l'ai pas compris


0 commentaires

3 Réponses :



1
votes

essayez avec ci-dessous:

to_char () function

select to_char(column1, 'fm000') as column2
from Test_table;

fm préfixe "fill mode" espaces de début dans le var char résultant. 000 il définit le nombre de chiffres que vous souhaitez avoir.


1 commentaires

Selon les docs to_char (texte, texte) < / code> n'existe pas.



0
votes

Vous pouvez utiliser des fonctions de chaîne comme lpad () , substr () , left () :

| result |
| ------ |
| DO01   |
| ES01   |
| ES02   |
| FR01   |
| FR10   |
| FR02   |
| FR03   |
| FR04   |
| FR05   |
| FR06   |
| FR07   |
| FR08   |
| FR09   |
| GP01   |
| GP02   |
| IN01   |
| IN02   |
| MU01   |
| RU01   |
| TR01   |
| UA01   |

Voir la démo .
Résultats:

select 
  concat(left(columnname, 2), lpad(substr(columnname, 3), 2, '0')) result
from tablename


2 commentaires

super, pouvez-vous expliquer ce que fait exactement lpad (substr (columnname, 3), 2, '0')?


substr (columnname, 3) renvoie tout, du caractère 3d à la fin de la valeur de la colonne et lpad s'assure que cette chaîne renvoyée fait exactement 2 caractères remplis à gauche avec 0 si nécessaire. Vous pouvez lire ceci: postgresqltutorial.com/postgresql-lpad