如何在postgresql中进行不区分大小写的搜索?

时间:2011-10-20 06:59:03

标签: postgresql

我有这样的postresql表:

id  user    year        id_card_no

1   john    1995        AZE546546       
2   ali     2002        464645AZE               
3   hayat   2007        4454AZE45455            
4   jack    2008        455454554

我想获取列( id_card_no )字段中包含AZE个字的所有值。我使用了这个查询:

SELECT * FROM table_name WHERE  id_card_no LIKE '%AZE%' 

但是我得到了id等于1的第一个字段。如何获取AZE内有id_card_no字的所有列?

2 个答案:

答案 0 :(得分:3)

对于不区分大小写的LIKE,您有两个选择:

SELECT * 
FROM table_name 
WHERE  id_card_no ILIKE '%AZE%' 

SELECT * 
FROM table_name 
WHERE lower(id_card_no) LIKE lower('%AZE%')

答案 1 :(得分:1)

这种选择不会扩展,因为它们注定要在9.1之前的PostgreSQL上进行顺序扫描。

如果你的表格很大,那么你最好读一下三元组索引以及它们在9.1中用于加速子字符串搜索的可能性。

如果您不在PostgreSQL 9.1上,则应考虑在子串数组上创建GIN / GIST索引,然后使用数组访问运算符来进行索引扫描。