Почему мой запрос с LIKE "% \ _" возвращает все строки, а не только те, которые заканчиваются подчеркиванием? - PullRequest
9 голосов
/ 27 января 2009

В настоящее время у меня запущен запрос на Postgres:

SELECT * FROM addenda.users WHERE users.username LIKE '%\_' 

Но вместо того, чтобы возвращать только записи, заканчивающиеся подчеркиванием, я получаю все результаты обратно, независимо от того, содержит ли оно подчеркивание или нет.

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

SELECT * FROM addenda.users WHERE users.username LIKE '\_' 

И выполнение запроса ниже возвращает имя пользователя, которое заканчивается конкретной буквой (буквами):

SELECT * FROM addenda.users WHERE users.username LIKE '%s' 

Что я делаю не так?

Ответы [ 4 ]

16 голосов
/ 27 января 2009

Ваша обратная косая черта не проходит через PostgreSQL? Если вы пропускаете строку через другой слой, который обрабатывает обратную косую черту как escape-символ (например, строку Java), то этот слой может удалять обратную косую черту, и вам может потребоваться экранировать обратную косую черту для этого слоя.

У вас есть еще одно-символьные имена пользователей? Если бы обратная косая черта не доходила до PostgreSQL, они также соответствовали бы '_'

Возможно, вы сможете попробовать предложение ESCAPE : username LIKE '%!_' ESCAPE '!'

5 голосов
/ 27 января 2009

"_" - односимвольный подстановочный знак в большинстве вариантов SQL. Вы ДОЛЖНЫ избежать этого, если хотите соответствовать действительному символу "_".

2 голосов
/ 17 июня 2014

Вы должны заменить обратную косую черту в вашем запросе двойной, например:

SELECT * FROM addenda.users WHERE users.username LIKE '%\\_'

Тем не менее вы можете получить нестандартное использование \\ в предупреждении строкового литерала , но запрос будет выполнен.
Протестировано в Postgres 8.4.

2 голосов
/ 27 января 2009

Прошло много времени с тех пор, как я использовал postgres, но я думаю, что вы можете сделать "% [_]", чтобы получить то, что вы хотите. Это, безусловно, работает на сервере SQL, хотя у меня нет сейчас настройки базы данных postgres, чтобы попробовать ее на

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