SQL SELECT LIKE(不区分大小写)

68

我正在尝试执行SQL查询:

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

但是数据保存为'Value'(V是大写)。

当我执行此查询时,我没有获取到任何行。我该如何使调用查找不考虑字符大小写的'value'?

9个回答

131

在列和搜索词中都使用LOWER函数。这样做可以确保即使查询中有像%VaLuE%这样的东西也不会影响结果。

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

21

如果您希望此列不区分大小写:

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

因此,您不需要更改查询。

而且MySQL引擎将比使用lower()函数或任何其他技巧更快地处理您的查询。

我不确定使用lower函数是否是索引搜索性能的好解决方案。


15

8

尝试使用不区分大小写的排序规则

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

7
使用 lower() 函数:
select t.*
from table t
where lower(column) like '%value%';

7
如果您正在使用PostgreSQL,更简单的解决方案是使用insensitive like (ILIKE)
SELECT * FROM table WHERE column ILIKE '%value%'

5

在使用like搜索某个字段时,你应该使用lowerupper函数来忽略大小写。

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

或者

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

3

0

这最终将执行相同的操作。ILIKE 不考虑大小写的特性。

SELECT * FROM table WHERE column_name ILIKE "%value%"


MySQL 中没有 ILIKE,我猜那是一个 Postgre 查询。 - mxix
但这与四年前的答案已在此处完成相同。我没有看到其他答案中没有提到的有价值的东西。 - Alter Lagos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接