REGEXP recherche sur libéllé - SQL/NoSQL - Programmation
Marsh Posté le 06-11-2013 à 20:26:39
Quelle base de données ?
Il y a de grosses différences d'un SQL à l'autre.
S'il est question de Tablespace, alors c'est peut-être de l'Oracle.
Dans quel contexte s'exécute ce SQL ? Dans du PL/SQL, ou dans des requêtes simples ?
C'est plus facile dans du PL/SQL, car on peut avoir des variables pour stocker des résultats intermédiaires.
Ensuite, ce genre de filtre se fait habituellement dans un autre langage que SQL. Pourquoi se filtre ne se fait pas au moment du stockage des données, ou après la sélection d'une chaine de caractères ?
Pourquoi rechercher ces caractères interdits ?
Est-ce juste pour les remplacer, pour les supprimer ou pour les compter ?
Si c'est pour les remplacer, alors il y a la fonction TRANSLATE() qui fait ça très bien.
Si c'est pour les supprimer, alors on peut utiliser la fonction TRANSLATE() associée à la fonction TRIM()
Si c'est pour les compter, alors on peut utiliser la fonction TRANSLATE() associée à la fonction LENGTH()
On peut jouer aussi avec INSTR() et DECODE().
Ou si c'est dans du PL/SQL, on peut carrément faire une boucle sur chaque caractère pour voir s'il est interdit ou non. C'est le plus simple et il ne faut pas croire que ce serait plus long qu'une autre façon de faire qui serait plus condensée.
Voili. Bon courage.
Marsh Posté le 06-11-2013 à 22:51:37
solk17 a écrit : bonjour à tous,
|
!
À mon avis, avec le SELECT que tu fais, c'est normal que tu n'obtiens pas ce que tu souhaites
En effet, tu écris :
Code :
|
ce qui se traduit par : nom_lib doit être composé d'un caractère alphanumérique, suivi d'un espace suivi d'un espace ou tabulation, suivi d'un espace.
(soit dit en passant, je ne sais pas si les notations \W et \S existent en SQL )
Pour moi, il faudrait plutôt une expression du genre :
Code :
|
ce qui revient à retrouver tous les nom_lib comportant 1 ou plus des caractères compris dans les crochets, à savoir un caractère alphanumérique ou un espace.
Le ^ et le $ t'assurent que nom_lib ne comporte que les caractères souhaités.
Pour en revenir à ta question initiale, la regexp qui pourrait convenir est du genre :
Code :
|
où on ne garde que les nom_lib comportant un caractère parmi ceux présents dans les crochets.
Marsh Posté le 07-11-2013 à 09:25:49
Bonjour,
Cela à l'air de fonctionner pour trouver les caractères autorisés.
Pour répondre à olivthill oui il s'agit d'oracle.
Je me suis peux être mal exprimé dans mon premier post. Mais je voudrai en réalité une requête qui recherche tous les nom_lib qui ont au moins un caractère différent de ceux que j'ai décrit dans le premier Post.
J'ai bien tester:
Code :
|
Mais sans succès visiblement.
Je croyais que le ^ excluait les caractères définis dans l’expression régulière, non?
Merci de votre aide et de vos réponses!
Marsh Posté le 07-11-2013 à 10:32:07
C'est bon j'ai trouver.
J'ai fais ceci.
Code :
|
il faut mettre le '-' en début de condition pour qu'il soit accepter.
Merci encore.
Marsh Posté le 07-11-2013 à 12:00:05
solk17 a écrit : Bonjour,
|
C'est vrai que j'avais compris le contraire en fait
Sinon, pour l'histoire du ^, tout dépend où il se trouve :
Marsh Posté le 06-11-2013 à 15:34:13
bonjour à tous,
Depuis peu j'essaye de créer un expression régulière en SQL mais je m'y prend assez mal et cela ne fonctionne pas.
J'aimerai rechercher sur une un champ de type varchar, toute les occurrences ayant ayant au moins un caractère interdit. Ici les caractère interdits sont les caractères différents de ceux autorisés:
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w",
"x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T",
"U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9","/","-","?",":","("," )",".",
",","’","+"
J'ai bien essayé de faire cela avec INTERSECT, mais mon tablespace est trop petit pour pouvoir exécuter cette requête.
J'ai donc penser aux expressions régulière, mais je ne capte pas grand chose à cela. Pour avoir des caractère uniquement alphanumérique ainsi que des espace j'ai fait:
Mais cela n'a pas l'air de fonctionner.
Pourrier vous me donner un coup de pousse SVP.