|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : avril 2006 Messages : 118 ![]() |
Bonjour,
Je cherche à retourner tous les clients qui se trouvent dans une ville donnée, j'ai donc grosso-modo: Code :
Je cherche donc un moyen de contourner ce probleme en ignorant l'apostophe mais sans resultat(translate de ' en rien). Donc si quelqu'un avait une idée car je supppose que c'est un problème récurrent. D'avance merci |
||
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : septembre 2004 Messages : 123 ![]() |
Bonjour,
Tu peux essayer avec la valeur en hexa de ton caractère apostrophe de la manière suivante : SELECT * FROM clients WHERE clVille LIKE '%'!!X'valeur en hexa de l apostrophe'!!'%' Alex. |
|
|
00
|
|
|
#3 | |||
|
Membre régulier
![]() Inscription : avril 2006 Messages : 118 ![]() |
Citation:
Bon la valeur hexa de la simple quote est 27, jusque là, ça va. Mais ensuite, pourquoi les % se retrouvent entre quotes? Qu'est ce que les !! ? X signifie t'il qu'on précise une valeur hexa? Et la valeur "maVilleRecherchée" à laquelle je veux comparer mon champs où est ce que je la précise? (En clair j'ai rien compris |
|||
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : septembre 2004 Messages : 123 ![]() |
Bonjour,
!! = concaténation de 2 chaines de caractères : 'A' !! 'B' = 'AB' le % est le cacractère de recherche générique LIKE '%'!!X'valeur en hexa de l apostrophe'!!'%' équivaut les chaînes de caractères contenant l'apostrophe par exemple ABC'DE ou 'ABC ou ABC' X veut bien dire que c'est en hexa. En admettant que tu recherches les villes avec "L' ....", ta requête ressemblera à ça : SELECT * FROM clients WHERE clVille LIKE 'L'!!x'27'!!'%' Si tu cherches l'hay les roses : SELECT * FROM clients WHERE clVille LIKE 'L'!!x'27'!!'hay les roses%' Par contre, je te conseille de vérifier le cadrage de tes noms de villes, "l'hay les roses" étant différent de "l ' hay les roses ". Il faudra faire ( à tester ), clVille LIKE 'L%'!!x'27'!!'%hay les roses%' en espérant que tu n'es pas une ville qui s'appelle l'ahay les roses. Il est aussi possible qu'un programme fasse déjà le bon formatage avant d'introduire les données dans DB2. Si tu ne le connais pas, renseignes-toi cela te permettra de connaître les cas et pièges à prendre en compte. Alex. |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : septembre 2004 Messages : 123 ![]() |
Bonjour,
!! = concaténation de 2 chaines de caractères : 'A' !! 'B' = 'AB' le % est le cacractère de recherche générique LIKE '%'!!X'valeur en hexa de l apostrophe'!!'%' équivaut les chaînes de caractères contenant l'apostrophe par exemple ABC'DE ou 'ABC ou ABC' X veut bien dire que c'est en hexa. En admettant que tu recherches les villes avec "L' ....", ta requête ressemblera à ça : SELECT * FROM clients WHERE clVille LIKE 'L'!!x'27'!!'%' Si tu cherches l'hay les roses : SELECT * FROM clients WHERE clVille LIKE 'L'!!x'27'!!'hay les roses%' Par contre, je te conseille de vérifier le cadrage de tes noms de villes, "l'hay les roses" étant différent de "l ' hay les roses ". Il faudra faire ( à tester ), clVille LIKE 'L%'!!x'27'!!'%hay les roses%' en espérant que tu n'es pas une ville qui s'appelle l'ahay les roses. Il est aussi possible qu'un programme fasse déjà le bon formatage avant d'introduire les données dans DB2. Si tu ne le connais pas, renseignes-toi cela te permettra de connaître les cas et pièges à prendre en compte. Alex. |
|
|
00
|
|
|
#6 | |||
|
Membre régulier
![]() Inscription : avril 2006 Messages : 118 ![]() |
Citation:
Citation:
(J'ai pas testé, c'est juste de la théorie car j'ai copié un bout de code existant qui fonctionne bien, même si je sais pas pourquoi, puisqu'il sert juste à ajouter % enfin de variable) Citation:
Merci de ton aide. |
|||
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : août 2006 Messages : 56 ![]() |
Que tout cela est bien compliqué
select * from testal1 where al1_char like 'L ''%'; ------------------------------------------------------------------------------ Results for a single query are displayed on the Query Results tab. 1 row(s) returned successfully. Il suffit de doubler la quote qui se trouve dans le nom à retrouver select * from testal1 where al1_char like '__''%'; ------------------------------------------------------------------------------ Results for a single query are displayed on the Query Results tab. 1 row(s) returned successfully. Dans cet exemple; la quote est en troisième position, le deux premières peuvent être n'importe quoi, de même à partir de la quatrième position. select * from testal1 where al1_char like '%''%'; ------------------------------------------------------------------------------ Results for a single query are displayed on the Query Results tab. 1 row(s) returned successfully. Ici la quote peux être n'importe où. |
|
|
00
|
|
|
#8 | |
|
Membre régulier
![]() Inscription : avril 2006 Messages : 118 ![]() |
Citation:
Bon, le problème n'est plus urgent puisqu'une solution a été trouvée. Mais si une solution pouvait répondre à la queston via du sql, ce serait peut être intéressant. Merci beaucoup de votre aide. |
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
ne conviendrait-il pas ?
|
|
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Inscription : septembre 2006 Messages : 15 ![]() |
Qu'est ce que ce Trim + Concat svp ?
Que va être le résultat de la requête ?? |
|
|
00
|
|
|
#11 |
![]() ![]() |
Tu peux utiliser la fonction Replac pour remplacer ' par '' dans la ville que tu cherche. Mais comment génères-tu ta commande SQL ?
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Code :
La fonction Concat() est l'équivalent des !! (deux points d'exclamation accolés). Donc, sur le prédicat WHERE suivant, Code :
WHERE clVille LIKE Trim(VilleRecherchée) !! '%' Si l'utilisateur a saisi "^^Paris^^^^^" (le caractère ^ représentant ici un espace) et si ces 2 fonctions (ou équivalents) sont supportées par ton SGBD, cela équivaudra à avoir saisi "Paris%" dans la variable VilleRecherchée , au lieu de "^^Paris^^^^^%". |
||
|
|
00
|
|
|
#13 | |
|
Membre régulier
![]() Inscription : avril 2006 Messages : 118 ![]() |
Citation:
|
|
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Effectivement, déclarer en RPG IV la variable VilleRecherchée en "varying" résoud le problème des blancs. Il suffit alors de concaténer le symbole "%" dans la variable pour faire la recherche avec un LIKE sql.
Pouquoi ça marche Et bien parce que justement tu as fort judicieusement déclaré la zone de saisie en longueur variable. La zone mémoire allouée pour les zones caractère de longueur variable est de deux octets plus longue que la longueur déclarée. Cette zone se compose d'un compteur binaire (transparent pour toi) qui contient la longueur de la saisie et la valeur saisie elle-même. Ainsi si on place la valeur "Paris" dans la variable, celle-ci sera constituée d'un compteur de 2 octets binaires valant x'0005' (longueur de la saisie) suivis de la valeur saisie "Paris". C'est le compilateur qui fait le calcul, tu n'as pas a en tenir compte. En y suffixant le caractère "%", la zone contient alors x'0006' (le compteur) suivi de "Paris%". La longueur est automatiquement recalculée et SQL s'en accommode. N'as-tu pas également des soucis entre majuscules et minuscules dans le nom de la ville ? Remarque : que la zone de saisie soit déclarée de longueur variable ou pas, l'exemple que j'ai montré dans mon post précédent aurait aussi bien marché. |
|
|
00
|
|
|
#15 | |
|
Membre régulier
![]() Inscription : avril 2006 Messages : 118 ![]() |
Citation:
Le fait est que je débute tout juste en RPGLE. J'ai commencé à taquiner un peu le monstre avant de suivre une formation au langage et donc de le découvrir plus en avant dont le "varying". Le varying m'a semblé alors mieux qu'un trim et la définition d'une nouvelle variable de recherche pour faire ma requête et du coup j'ai résolu mon problème d'apostrophe. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com