web-dev-qa-db-fra.com

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 capital).

Lorsque j'exécute cette requête, je ne reçois aucune ligne. Comment faire l'appel de telle sorte qu'il recherche la «valeur» quel que soit le style des caractères?

42
user2583714

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

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

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 n'avez pas à changer votre requête.

Et le moteur MySQL traitera votre requête plus rapidement que d’utiliser la fonction lower () ou d’autres astuces.

Et je ne suis pas sûr que l’utilisation de la fonction low constitue une bonne solution pour les performances de recherche d’index .

13
kmas

Utilisez un classement insensible à la casse sur votre table ou bien forcez les valeurs à être en minuscule, par exemple.

WHERE lower(column) LIKE lower('%value%');
12
Marc B

Utilisez la fonction lower():

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

Essayez d'utiliser un classement insensible à la casse.

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

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

SELECT * FROM table WHERE column ILIKE '%value%'
1
Alter Lagos

vous devez utiliser la fonction lower ou upper pour ignorer la casse pendant que vous recherchez un champ utilisant like.

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

OU 

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