PostgreSQL 12 объяснение функции `quote_literal` - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу понять, как работает функция quote_literal().

Это моя таблица:

CREATE TABLE temp_emp (
    id integer,
    name text
);

INSERT INTO TEMP_EMP (id, name) VALUES (1, 'Super Pavel');

Когда я делаю:

SELECT * FROM "public".temp_emp WHERE name like '%Pavel%';

У меня есть 1 строка в результате.

Однако, когда я делаю:

SELECT * FROM "public".temp_emp WHERE name like quote_literal('%Pavel%');

У меня есть 0 строк в результате.

В то же время:

SELECT * FROM quote_literal('%Pavel%');

возвращает '%Pavel%'.

Может кто-нибудь объяснить, почему like '%Pavel%' и like quote_literal('%Pavel%') дают разные результаты?

1 Ответ

1 голос
/ 21 апреля 2020

Цель quote_literal() - как объяснено в документации - заключить в кавычки значения для Dynami c SQL. Dynami c SQL означает, что вы помещаете SQL в строку.

Если вы запустите это при различных значениях, вы увидите, что оно включает одинарные кавычки:

select str, '"' || quote_literal(str) || '"'
from (values ('abc'), ('abc def'), ('abc '' def')) v(str);

Возвращает:

abc          "'abc'"
abc def      "'abc def'"
abc ' def    "'abc '' def'"

В частности, одинарные кавычки внутри строки - там тоже есть двойные кавычки, но только для иллюстрации границы строки.

Очевидно, что, хотя в ваших данных может быть встроено 'Pavel', ни одна из ваших строк не имеет 'Pavel' с одинарными кавычками.

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