Question SQL SELECT LIKE (boîtier insensible)


J'essaie d'exécuter la requête sql:

select * from table where column like '%value%';

Mais les données sont enregistrées en tant que «valeur» (V est la majuscule).

Lorsque j'exécute cette requête, je n'obtiens aucune ligne. Comment est-ce que je fais l'appel tel que, il cherche la «valeur» indépendamment du casse des caractères?


40
2017-09-17 15:06


origine


Réponses:


utilisez la fonction LOWER dans les deux (colonne et mot (s) de recherche). En faisant cela, vous vous assurez que même si dans la requête est quelque chose comme% VaLuE%, cela n'aura aucune importance

select qt.*
from query_table qt
where LOWER(column_name) LIKE LOWER('%vAlUe%');

73
2017-09-17 15:15



Si vous voulez que cette colonne soit insensible à la casse:

ALTER TABLE `schema`.`table` 
CHANGE COLUMN `column` `column` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

Ainsi, vous ne devez pas modifier votre requête.

Et le moteur MySQL traitera votre requête plus rapidement qu'avec la fonction lower () ou d'autres astuces.

Et je ne suis pas sûr que l'utilisation de fonctions plus faibles sera une bonne solution pour performance de recherche d'index.


13
2017-09-17 15:15



Soit utiliser un collation insensible à la casse sur votre table, ou forcer les valeurs être minuscule, par ex.

WHERE lower(column) LIKE lower('%value%');

12
2017-09-17 15:09



Utilisez le lower() fonction:

select t.*
from table t
where lower(column) like '%value%';

5
2017-09-17 15:08



Essayez d'utiliser un classement insensible à la casse

select * from table
where column like '%value%' collate utf8_general_ci

4
2017-09-17 15:08



Si vous utilisez PostgreSQL, une solution plus simple consiste à utiliser insensible comme (ILIKE):

SELECT * FROM table WHERE column ILIKE '%value%'

1
2018-05-22 20:26



vous devriez utiliser soit inférieur ou plus haut fonction pour ignorer le cas pendant que vous recherchez un champ en utilisant like.

select * from student where upper(sname) like 'S%';

OU

select * from student where lower(sname) like 'S%';

0
2017-12-26 06:01