Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/11/2011, 15h09   #1
Invité régulier
 
Inscription : octobre 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 17
Points : 8
Points : 8
Par défaut Update des data dans une column varchar2(3 byte)

Bonjour,

J'ai une column de type VARCHAR2(3 byte) dans une de mes tables.

A l'interieur de cette colonne j'ai des values du genre 1 ,COR ,023 ,22 Je voudrais faire un petit script pour updater toutes les valeurs en rajoutant des 0 devant lorsque la valeur ne fait pas 3 caractères.

Par exemple:
8 devient 008
021 reste 021
22 devient 022

Si quelqun a une piste je suis preneur
Merci d'avance

PS: Je ne peux évidement pas changer le type de donnée......
Kagukuk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 15h11   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 644
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 644
Points : 2 641
Points : 2 641
bonjour,

regardez du côté du "CASE....WHEN" et "length"
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 15h23   #3
Membre régulier
 
Inscription : septembre 2008
Messages : 85
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 85
Points : 89
Points : 89
Bonjour,

Une solution pourrait ressembler à ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
WITH t AS (
SELECT 'a' COL FROM DUAL Union ALL
SELECT 'afdsgd' COL FROM DUAL Union ALL
SELECT '1234' COL FROM DUAL Union ALL
SELECT NULL COL FROM DUAL Union ALL
SELECT '12' COL FROM DUAL Union ALL
SELECT '1' COL FROM DUAL
)
UPDATE T SET col = Trim(TO_CHAR(T.COL, '000'))
 WHERE REGEXP_LIKE(T.COL, '^[0-9]*$')
   AND LENGTH(T.COL) <= 3)
spdev666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 15h29   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 313
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 313
Points : 5 819
Points : 5 819
Utilisez Lpad, c'est fait pour ça.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 15/11/2011, 15h45   #5
Invité régulier
 
Inscription : octobre 2010
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2010
Messages : 17
Points : 8
Points : 8
Merci a tous pour les pistes qui m'ont bien aidé, ce que j'ai fait de doit pas être des plus propres mais bon vus que c'est un script oneshot ca feras le job.

Code :
1
2
3
4
5
6
7
8
 
UPDATE NATURE SET NAT_CDNATURE =
CASE 
    WHEN LENGTH(TRIM(NAT_CDNATURE)) = 1 THEN CONCAT('00',TRIM(NAT_CDNATURE))
    WHEN LENGTH(TRIM(NAT_CDNATURE)) = 2 THEN CONCAT('0',TRIM(NAT_CDNATURE))
    WHEN LENGTH(TRIM(NAT_CDNATURE)) = 3 THEN NAT_CDNATURE
    ELSE 'XXX'
END
PS: J'ai testé avec Lpad que je ne connaissais pas non plus (je touche rarement a des bases oracle) ca marche aussi.
Kagukuk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h22.


 
 
 
 
Partenaires

Hébergement Web