2013-09-17 2 views
36

Я пытаюсь выполнить запрос SQL:SQL SELECT LIKE (Нечувствительность корпус)

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

Но данные сохраняются в виде 'Value' (V является капиталом).

Когда я выполняю этот запрос, я не получаю никаких строк. Как сделать вызов таким образом, что он ищет «значение» независимо от обложки символов?

ответ

69

использование LOWER Функция в обоих (столбец и слова поиска). Делать это так, то гарантировать, что даже если в запросе что-то вроде% Значение%, это обыкновение дело

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

... лол пытался понять это ... Ваше решение было удивительно просто. Независимо от того, как долго я был дев, я никогда не перестаю удивлять меня, как я могу думать о чем-то иногда. – greaterKing

4

Попробуйте использовать регистрозависимости сверку

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

Используйте lower() функции:

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

Либо использовать case-insensitive collation на вашем столе, или быть в нижнем регистре, например

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

Если вы хотите, этот столбец будет нечувствительно к регистру:

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

Таким образом, вы не Не нужно менять свой запрос.

И двигатель MySQL будет обрабатывать ваш запрос быстрее, чем с помощью функции lower() или любых других трюков.

И я не уверен, что использование более низкой функции будет хорошим решением для индексный поиск производительности.

0

вы должны использовать либо ниже или верхнюю функции, чтобы игнорировать случай, когда вы ищете какую-то область, используя как.

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

ИЛИ

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

Если вы используете PostgreSQL, более простым решением является использование insensitive like (ILIKE):

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