2017-10-20 49 views
-2

J'ai trois scénarios.Ajout de zéro entre les chaînes

Scénario 1:

Si j'ai la chaîne suivante

chaîne réelle: 1111-2222-33

besoin de remplacer comme en ajoutant zéro.

Formaté Chaîne: 01111-2222-33

Scénario 2:

Si j'ai la chaîne suivante

chaîne réelle: 11111-222-33

Besoin de remplacer comme en ajoutant zéro avant le début de la première '-'

Strass formaté g: 11111-0222-33

Scénario 3:

Si j'ai la chaîne suivante

chaîne réelle: 11111-2222-3

besoin de remplacer comme en ajoutant zéro avant le début de la deuxième '-'

Chaîne mise en forme: 11111-2222-03

Comment puis-je convertir la chaîne ci-dessus? Merci à l'avance

+2

Qu'avez-vous fait de tarif? SO n'est pas un service de codage –

+0

@Temani Afif je ne t'ai pas eu. –

+0

[donc] n'est pas un site web gratuit. S'il vous plaît montrez-nous l'effort que vous avez mis et ce que vous avez essayé jusqu'à présent. Nous sommes là pour vous aider lorsque vous rencontrez des problèmes mais pas ** pour écrire votre code pour vous. Je vous recommande de prendre le [tour] et de lire la page [ask] pour apprendre à poser une bonne question. – Shogunivar

Répondre

0

Voici une façon de procéder. Il utilise des fonctions de chaîne standard, ce qui peut être important si les performances sont un problème (les fonctions standard sont beaucoup plus rapides que les fonctions d'expression régulières). Notez toutefois que cela convertira également la chaîne 'do-it-yourself' en '000do-00it-yo'. Si cela n'est pas souhaité, vous devez expliquer toutes vos règles dans le message d'origine.

with 
    inputs (str) as (
    select '1111-2222-33' from dual union all 
    select '11111-222-33' from dual union all 
    select '11111-2222-3' from dual union all 
    select '1234-03-0' from dual 
) 
-- End of simulated inputs (for testing only, not part of the solution). 
-- SQL query begins BELOW THIS LINE. Use your actual table and column names. 
select str, 
     lpad(substr(str, 1, instr(str, '-') - 1), 5, '0') || '-' || 
     lpad(substr(str, instr(str, '-') + 1, 
         instr(str, '-', 1, 2) - instr(str, '-') - 1), 4, '0') 
     || '-' || lpad(substr(str, instr(str, '-', 1, 2) + 1), 2, '0') as new_str 
from inputs 
; 

STR   NEW_STR  
------------ ------------- 
1111-2222-33 01111-2222-33 
11111-222-33 11111-0222-33 
11111-2222-3 11111-2222-03 
1234-03-0-0003-00 
+0

Merci beaucoup. Ça marche :) –

0

Par souci d'argument, voici une autre méthode utilisant des expressions régulières. Pour le premier élément, sélectionnez la première occurrence jusqu'à 5 chiffres suivis d'un tiret, puis lpad avec des zéros à une longueur de 5.

with tbl(str) as (
    select '1111-2222-33' from dual union all 
    select '11111-222-33' from dual union all 
    select '11111-2222-3' from dual union all 
    select '1234-03-0' from dual 
) 
select 
    lpad(regexp_substr(str, '(\d{0,5})-', 1, 1, NULL, 1), 5, '0') || '-' || 
    lpad(regexp_substr(str, '(\d{0,4})-', 1, 2, NULL, 1), 4, '0') || '-' || 
    lpad(regexp_substr(str, '-(\d{0,2})$', 1, 1, NULL, 1), 2, '0') formatted 
from tbl;