Как я могу сделать поиск без учета регистра в postresql? - PullRequest
1 голос
/ 20 октября 2011

У меня есть такая таблица postresql:

id  user    year        id_card_no

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

Я хочу получить все значения, которые имеют AZE слово в столбце ( id_card_no ). Я использовал этот запрос:

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

Но я получил первое поле, которое id равно 1. Как я могу получить все столбцы, которые имеют AZE слово внутри id_card_no?

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

Для выполнения LIKE без учета регистра у вас есть два варианта:

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

или

SELECT * 
FROM table_name 
WHERE lower(id_card_no) LIKE lower('%AZE%')
1 голос
/ 20 октября 2011

Этот тип выбора не масштабируется, так как он обречен на последовательное сканирование в PostgreSQL до 9.1.

Если ваша таблица будет большой, лучше прочитать об индексах триграмм и возможностях их использования в 9.1 для ускорения поиска по подстроке.

Если вы нев PostgreSQL 9.1 вы должны рассмотреть возможность создания индекса GIN / GIST для массивов подстрок, а затем использовать операторы доступа к массиву, чтобы сделать возможным сканирование индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...