Précédent   Forum du club des développeurs et IT Pro > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/12/2012, 16h32   #1
raz2008
Futur Membre du Club
 
Inscription : avril 2008
Messages : 55
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 55
Points : 16
Points : 16
Par défaut Vérifier format d'une chaine de caractères

Bonjour tous,

existe-t-il un moyen avec plsql de vérifier par exemple qu'une chaine contient une séquence répétitive? On peut fixer la taille de la chaine.
Par exemple, comment vérifier qu'une chaine est constitué d'un même caractère qui se répète Ex: 111111111, aaaaaaa, ccccccc.
Un autre exemple serait les chaines du type xxyyzzxxyyzz, ou autre format.

Merci d'avance!
raz2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 17h43   #2
Waldar
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 6 278
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 35
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2008
Messages : 6 278
Points : 13 570
Points : 13 570
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Vous voulez rechercher la chaîne ou bien vous la connaissez et vous désirez la tester ?
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 17h52   #3
raz2008
Futur Membre du Club
 
Inscription : avril 2008
Messages : 55
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 55
Points : 16
Points : 16
Citation:
Envoyé par Waldar Voir le message
Vous voulez rechercher la chaîne ou bien vous la connaissez et vous désirez la tester ?
En fait il est juste question de vérifier que la chaine vérifie ou pas une certaine condition.
En réalité, mon problème est que j'ai des numéros d'identification qui sont renseignés par des usagers, et je voudrais vérifier que ces derniers, par paresse ou pour autre raison, ne remplissent pas de numéros fantaisistes du genre une série du même caractère etc.
raz2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 18h00   #4
Waldar
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 6 278
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 35
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2008
Messages : 6 278
Points : 13 570
Points : 13 570
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Compliqué si n'importe quelle chaîne peut être candidate.

Si vous voulez vérifiez des chaînes en particulier vous pouvez utiliser trim :
Code :
1
2
3
4
5
6
7
SELECT col
  FROM (SELECT 'xxyyzzxxyyzz' AS col FROM dual)
 WHERE ltrim(col, 'xxyyzz') IS NULL;
 
COL
------------
xxyyzzxxyyzz
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 10/12/2012, 18h14   #5
raz2008
Futur Membre du Club
 
Inscription : avril 2008
Messages : 55
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 55
Points : 16
Points : 16
Effectivement n'importe quelle chaine peut être candidate. Je me demandais juste si il n'existait pas d'expression régulière ou alors un moyen d'en construire une, comme c'est le cas dans le laungages évolués comme C/C++, PHP, Java, etc.
raz2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 18h29   #6
Waldar
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 6 278
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 35
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2008
Messages : 6 278
Points : 13 570
Points : 13 570
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
En effet avec une expression régulière c'est probablement faisable, mais pas parfait :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WITH sr AS
(
SELECT 'xxyyzzxxyyzz' AS col FROM dual union ALL
SELECT 'chaine non repetee'  FROM dual union ALL
SELECT '111111111'           FROM dual union ALL
SELECT 'aaaaaaa'             FROM dual union ALL
SELECT 'ccccccc'             FROM dual
)
SELECT col
  FROM sr
 WHERE regexp_like(col, '(.{2,})\1');
 
COL
------------
xxyyzzxxyyzz
111111111
aaaaaaa
ccccccc
Dans cet exemple l'expression régulière recherche une chaîne d'au moins deux caractères qui est accolée une fois à elle-même.
À affiner selon vos cas concrets.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 20h21   #7
raz2008
Futur Membre du Club
 
Inscription : avril 2008
Messages : 55
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 55
Points : 16
Points : 16
Citation:
Envoyé par Waldar Voir le message
En effet avec une expression régulière c'est probablement faisable, mais pas parfait :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WITH sr AS
(
SELECT 'xxyyzzxxyyzz' AS col FROM dual union ALL
SELECT 'chaine non repetee'  FROM dual union ALL
SELECT '111111111'           FROM dual union ALL
SELECT 'aaaaaaa'             FROM dual union ALL
SELECT 'ccccccc'             FROM dual
)
SELECT col
  FROM sr
 WHERE regexp_like(col, '(.{2,})\1');
 
COL
------------
xxyyzzxxyyzz
111111111
aaaaaaa
ccccccc
Dans cet exemple l'expression régulière recherche une chaîne d'au moins deux caractères qui est accolée une fois à elle-même.
À affiner selon vos cas concrets.
Merci beaucoup, je dois avouer que ceci est pour moi un début de solution, bien que je ne sache pas encore trop bien comment modifier à ma guise l'expression régulière dans le , mais je vais encore creuser un peu...
raz2008 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 10h42   #8
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 562
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 562
Points : 4 452
Points : 4 452
Citation:
Envoyé par Waldar Voir le message
Compliqué si n'importe quelle chaîne peut être candidate.

Si vous voulez vérifiez des chaînes en particulier vous pouvez utiliser trim :
Code :
1
2
3
4
5
6
7
SELECT col
  FROM (SELECT 'xxyyzzxxyyzz' AS col FROM dual)
 WHERE ltrim(col, 'xxyyzz') IS NULL;
 
COL
------------
xxyyzzxxyyzz
Non Waldar, le ltrim ne vérifie pas l'ordre et c'est une vérification pour chaque caractère.
Code :
LTRIM(col, 'xxyyzz') = LTRIM(col, 'xyz') = LTRIM(col,'zyx') =LTRIM(col, 'yzx'),etc..
Donc ta requête ramène aussi les lignes 'zzzzzzzzzxy' voire 'z'

Le trim est utile pour vérifier qu'une chaine contient des nombres
Code :
LTRIM('11122012', '0123456789') IS NULL
Ou pour supprimer des caractères de fin/début de chaine
Code :
LTRIM('1; 2; 3; 4; ; ; ', ' ;')
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/12/2012, 11h12   #9
Waldar
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 6 278
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 35
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2008
Messages : 6 278
Points : 13 570
Points : 13 570
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Je me ferais toujours avoir je crois !
Merci McM.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


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


 
 
 
 
Partenaires

Hébergement Web