我有这样的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
字的所有列?
答案 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索引,然后使用数组访问运算符来进行索引扫描。