PostgreSQL | Два символа процента и один символ процента, в чём разница?

PostgreSQL | Два символа процента и один символ процента, в чём разница?

Как экранировать «остаток от деления» — символ процента?

В коде для PostgreSQL можно увидеть последовательно два символа процента «%%«. Мы понимаем, что это может быть обычная строка с типом text или даже шаблон регулярного выражения. Но!

Всё меняется, когда нам необходимо выполнить динамическую команду PostgreSQL с использованием оператора «остаток от деления», который обозначается одинарным символом процента. Речь идёт про встроенную в PostgreSQL функцию execute().

В динамических запросах, сформированных в виде строки, нужно дополнительно проставлять ещё один символ процента для ожидаемого оператора «остатка от деления». По сути мы занимаемся экранированием одинарного символа процента, который является частью синтаксической конструкции для самого PostgreSQL.

В результате мы получаем что-то подобное:

'case
   when (dense_rank() over (order by id desc)) %% 2 = 0 then 0
   else 1
end'

Это строковый вид команды для динамического запроса! Не перепутайте.

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org

Официальный сайт клиента DBeaver для СУБД PostgreSQLhttps://dbeaver.io