Как избежать подчеркивания в Postgresql

при поиске подчеркиваний в Postgresql буквальное использование символа _ не работает. Например, если вы хотите найти во всех таблицах столбцы, заканчивающиеся на _by, для чего-то вроде журнала изменений или информации о деятельности, например updated_by, reviewed_by, etc. следующий запрос почти работает:

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%_by'

он в основном полностью игнорирует подчеркивание и возвращается, как если бы вы искали LIKE '%by'. Это не может быть проблемой во всех случаях, но она имеет потенциал быть одним из них. Как искать подчеркивания?

2 ответов


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

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%\_by'

просто столкнулся с той же проблемой, и одна обратная косая черта не работала. Я нашел эту документацию в сообществе PostgreSQL, и она сработала:

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

выбрать * из foo где бар, как "%\\_baz"

первый слеш котировки второй для разбора запросов, так то, что остается внутри система %\_baz, а затем подобное функция знает, что с этим делать.

поэтому используйте что-то вроде этого:

SELECT table_name, column_name FROM information_schema.columns
WHERE column_name LIKE '%\_by'

Исходная Документация:https://www.postgresql.org/message-id/10965.962991238%40sss.pgh.pa.us