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
3 Réponses :
@sql. . . J'avais remarqué cela au moment où vous écriviez le commentaire.
J'utiliserais regexp. Pour les exemples de données donnés, il peut même s'agir de replace (col, '^ (..) (.) $', '\ 10 \ 2')
.
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.
Selon les docs to_char (texte, texte) < / code> n'existe pas.
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
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