экранирование скобок в запросе postgresql - PullRequest
0 голосов
/ 06 марта 2009

Я пытаюсь избежать скобки в выражении сопоставления с образцом для PostgreSQL 8.2

Предложение выглядит примерно так:

WHERE field SIMILAR TO '%UPC=\[ R%%(\mLE)%'

но я продолжаю получать:

ERROR:  invalid regular expression: brackets [] not balanced

1 Ответ

2 голосов
/ 06 марта 2009

Попробуйте это:

select '%UPC=\[ R%%(\mLE)%';
WARNING:  nonstandard use of escape in a string literal
LINE 1: select '%UPC=\[ R%%(\mLE)%';
               ^
HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'.
     ?column?     
------------------
 %UPC=[ R%%(mLE)%
(1 row)

Вам необходимо установить Postgres в стандартных соответствующих строках режиме вместо обратно совместимого режима.

set standard_conforming_strings=1;
select '%UPC=\[ R%%(\mLE)%';
      ?column?      
--------------------
 %UPC=\[ R%%(\mLE)%
(1 row)

Или вам нужно использовать синтаксис escape-строки , который работает независимо от режима:

set standard_conforming_strings=1;
select E'%UPC=\\[ R%%(\\mLE)%';
      ?column?      
--------------------
 %UPC=\[ R%%(\mLE)%
(1 row)

set standard_conforming_strings=0;
select E'%UPC=\\[ R%%(\\mLE)%';
      ?column?      
--------------------
 %UPC=\[ R%%(\mLE)%
(1 row)

Вы можете установить этот параметр в postgresql.conf для всех баз данных, используя alter database для одной базы данных, используя alter user для одного пользователя или группы пользователей или используя set для текущего соединения.

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