Регулярное выражение: SQL-запрос Postgres возвращает все записи, доступные в таблице - PullRequest
1 голос
/ 28 декабря 2011

Приведенный ниже SQL-запрос Postgres возвращает все записи, доступные в таблице. Кто-нибудь может дать объяснение этому? , Также, пожалуйста, дайте мне знать, что * представляет в случае регулярного выражения postgres.

Employee table contains :

name
Chennai
Delhi
Hydrabad
NewYark
ABC

select * from employee where name ~ 'Z*'

Ответы [ 2 ]

3 голосов
/ 28 декабря 2011

Квантор * означает ноль или более . Поскольку каждое имя содержит как минимум ноль Z символов, возвращается каждая строка.

Вам не нужно использовать регулярное выражение для поиска строк, начинающихся с символа, вы можете просто использовать LIKE:

SELECT record FROM myrecords WHERE name LIKE 'Z%';

Если вы хотите, чтобы имена начинались с Z с использованием регулярного выражения , попробуйте следующее:

SELECT record FROM myrecords WHERE name ~ '^Z';

Если вы хотите, чтобы имена содержали хотя бы один Z, попробуйте один из них:

SELECT record FROM myrecords WHERE name LIKE '%Z%';
SELECT record FROM myrecords WHERE name ~ 'Z';
3 голосов
/ 28 декабря 2011

Это правильный запрос для поиска имени, начинающегося с 'Z':

SELECT record FROM myrecords WHERE name ~ '^Z';

в вашем запросе:

select * from employee where name ~ 'Z*'

это означает, что имя соответствует нулю или более последовательностей символа "Z", следовательно, возвращаются все записи.

  • * в критериях соответствия означает НОЛЬ или БОЛЬШЕ вхождений.

  • * вместе с тильдой означает совпадение без учета регистра, т. Е. ~ * 'Z' будет соответствовать как "z", так и "Z"

Подробнее смотрите здесь:

http://oreilly.com/pub/a/databases/2006/02/02/postgresq_regexes.html?page=1

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