Fonction ne tenant pas compte de la casse
Mickael86480
-
java -
java -
Bonjour, je souhaiterai savoir s'il existe un fonction en php ou en sql pour ne plus tenir compte de la casse (ne plus tenir compte de la différence majuscule/minuscule), les fonctions upper() et lower() ne fonctionnent pas puisqu'elles mettent en minuscule ou en majuscule toute la chaine or dans ma bdd, les noms des commerces sont écrit en majuscule et en minuscule.
Je m'explique, je dois faire un site qui regroupe tous les commerces de la ville. Dans un formulaire php, on doit rentrer le nom d'un commerce, ensuite je dois interroger ma base de données. Par exemple, un utilisateur rentre "chez toto" seulement dans ma bdd le commerce ce nomme "chez Toto" mais je dois quand même afficher les informations concernant "chez Toto" bien qu'il n'ait pas entré le nom correctement. Ainsi je ne dois pas tenir compte de la casse.
J'espère avoir été assez clair
Auriez-vous une idée svp?
merci d'avance
Je m'explique, je dois faire un site qui regroupe tous les commerces de la ville. Dans un formulaire php, on doit rentrer le nom d'un commerce, ensuite je dois interroger ma base de données. Par exemple, un utilisateur rentre "chez toto" seulement dans ma bdd le commerce ce nomme "chez Toto" mais je dois quand même afficher les informations concernant "chez Toto" bien qu'il n'ait pas entré le nom correctement. Ainsi je ne dois pas tenir compte de la casse.
J'espère avoir été assez clair
Auriez-vous une idée svp?
merci d'avance
A voir également:
- Fonction ne tenant pas compte de la casse
- Fonction si et - Guide
- Créer un compte google - Guide
- Installer windows 10 sans compte microsoft - Guide
- Comment créer un compte gmail - Guide
- Comment savoir qui regarde mon compte facebook - Guide
15 réponses
Non, elle n'est pas correcte car
1) comme constaté dans ton post #5 et expliqué dans mon post #6, en MySQL, tu n'as pas le droit d'utiliser || comme opérateur de concaténation puisqu'il symbolise déjà le OU logique. Tu dois utiliser la fonction CONCAT().
2) en supposant que les apostrophes (') qui encadrent nom_com dans ta requête sont en fait des délimiteurs de colonne (comme le ' sous Linux), tu exiges dans ta requête que la colonne nom_com contienne '||upper(' suivi du nom du commerce saisi suivi de ')||' (tu as écrit upper dans la chaine) tout en demandant que le nom du commerce saisi soit égal à nom_com.
2bis) si les apostrophes sont bien des délimiteurs de chaine, tu cherches à savoir si '||upper(' suivi du nom du commerce saisi suivi de ')||' est compris dans la constante 'nom_com'
3) Si t'as copié/collé ta requête, alors il y a souci car ton tout dernier nom_com est précédé d'une apostrophe sans correspondance.
Avec un peu plus d'attention, tu aurais écrit
Select *
From t1
where upper(nom_com) like upper(concat('%','$NomCommerce','%'))
[EDIT] j'enlève les accents graves autour de nom_com car ils servent à rien et sont affichés en apostrophes par CCM
1) comme constaté dans ton post #5 et expliqué dans mon post #6, en MySQL, tu n'as pas le droit d'utiliser || comme opérateur de concaténation puisqu'il symbolise déjà le OU logique. Tu dois utiliser la fonction CONCAT().
2) en supposant que les apostrophes (') qui encadrent nom_com dans ta requête sont en fait des délimiteurs de colonne (comme le ' sous Linux), tu exiges dans ta requête que la colonne nom_com contienne '||upper(' suivi du nom du commerce saisi suivi de ')||' (tu as écrit upper dans la chaine) tout en demandant que le nom du commerce saisi soit égal à nom_com.
2bis) si les apostrophes sont bien des délimiteurs de chaine, tu cherches à savoir si '||upper(' suivi du nom du commerce saisi suivi de ')||' est compris dans la constante 'nom_com'
3) Si t'as copié/collé ta requête, alors il y a souci car ton tout dernier nom_com est précédé d'une apostrophe sans correspondance.
Avec un peu plus d'attention, tu aurais écrit
Select *
From t1
where upper(nom_com) like upper(concat('%','$NomCommerce','%'))
[EDIT] j'enlève les accents graves autour de nom_com car ils servent à rien et sont affichés en apostrophes par CCM
Bonjour,
Pourquoi ne pas faire tout simplement ceci
A plus
Pourquoi ne pas faire tout simplement ceci
select * from nomtable where upper(nomcommerce) = upper(nomintroduit)
A plus
Salut,
pour compléter la suggestion de Christounet:
tu peux aussi utiliser un motif
le but est de comparer les chaines sans toucher aux données de la base ou celles saisies par l'utilisateur
pour compléter la suggestion de Christounet:
tu peux aussi utiliser un motif
select * from nomtable where upper(nomcommerce) like '%'||upper(nomintroduit)||'%'
le but est de comparer les chaines sans toucher aux données de la base ou celles saisies par l'utilisateur
Merci à vous 2, mais j'ai fais un copier/coller de fiu et rajouté un";" mais j'ai une erreur de syntaxe et je ne vois pas pourquoi, pourriez-vous m'aider svp
merci
merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai trouvé l'erreur mais çà n'affiche pas ce que je veux, çà me met :
Unknown column 't' in 'where clause'
(Colonne inconnue 't' dans ' où clause ')
alors que j'ai un commerce qui commence par "T"
ainsi que:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')||'%'' at line 4
(Vous avez une erreur dans votre syntaxe de SQL; vérifiez le manuel qui correspond à votre version de serveur MySQL pour la syntaxe juste pour utiliser près ') || ' le % "à la ligne 4)
Unknown column 't' in 'where clause'
(Colonne inconnue 't' dans ' où clause ')
alors que j'ai un commerce qui commence par "T"
ainsi que:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')||'%'' at line 4
(Vous avez une erreur dans votre syntaxe de SQL; vérifiez le manuel qui correspond à votre version de serveur MySQL pour la syntaxe juste pour utiliser près ') || ' le % "à la ligne 4)
Salut,
Unknown column 't' in 'where clause'
=> Colonne T inconnue dans la clause WHERE
==> tu utilises une colonne T qui n'est pas disponible dans les tables que tu requêtes
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')||'%'' at line 4
=> (la traduction est acceptable)
==> || est l'opérateur SQL pour la concaténation de chaînes. Manque de bol, en MySQL, il désigne le OU logique. Pour la concaténation de chaînes en MySQL, il faut utiliser CONCAT().
Unknown column 't' in 'where clause'
=> Colonne T inconnue dans la clause WHERE
==> tu utilises une colonne T qui n'est pas disponible dans les tables que tu requêtes
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')||'%'' at line 4
=> (la traduction est acceptable)
==> || est l'opérateur SQL pour la concaténation de chaînes. Manque de bol, en MySQL, il désigne le OU logique. Pour la concaténation de chaînes en MySQL, il faut utiliser CONCAT().
Nan çà ne fonctionne pas, je l'ai mise dans une requête, pas d'erreur mais çà ne tient pas compte de la casse
Sisi, la fonction UPPER() convertit la chaine en majuscules. Et si tu veux comparer des chaines sans tenir compte de la casse, les seuls choix possibles sont de comparer 2 chaines majuscules ou 2 chaines minuscules.
Ensuite, je serais assez curieux de voir ta requête pour comprendre comment tu peux assurer que UPPER() ne fonctionne pas...
Ensuite, je serais assez curieux de voir ta requête pour comprendre comment tu peux assurer que UPPER() ne fonctionne pas...
Dit moi si jme troupe, mais la fonction UPPER() met toute la chaîne de caractère en majuscule puis la compare à la chaine de caractère de ma bdd?
Non pas du tout, la fonction UPPER() se contente de convertir en majuscules la chaine passée en argument.
Si tu veux comparer 2 chaines sans tenir compte de la casse, c'est (en SQL) :
... AND Upper(exprChaine1) = Upper(exprChaine2)
si exprChaine1 représente Coiffeur et ExprChaine2 représente cOIffEUr alors la condition sera vérifiée.
Si tu veux comparer 2 chaines sans tenir compte de la casse, c'est (en SQL) :
... AND Upper(exprChaine1) = Upper(exprChaine2)
si exprChaine1 représente Coiffeur et ExprChaine2 représente cOIffEUr alors la condition sera vérifiée.