我有以下sql命令,我需要在PostgreSQL中转义括号,我该怎么做?
SELECT rua
FROM logradouros
WHERE rua ~* 'Antonio De Sant\'Ana Galvao Av Frei (Av 01 Parte A)'
LIMIT 100;
答案 0 :(得分:3)
一般来说,美元报价是您最好的选择。观察:
SELECT $STR$Antonio De Sant\'Ana Galvao Av Frei (Av 01 Parte A)$STR$;
-----------------------------------------------------
Antonio De Sant\'Ana Galvao Av Frei (Av 01 Parte A)
(1 row)
答案 1 :(得分:2)
使用反斜杠转义括号。请注意,如果standard_conforming_strings参数设置为off(这是PostgreSQL 9.1的默认行为),则需要使用两个反斜杠\\
。
一般来说,如何逃避括号有三种方法:
'pattern'
语法,它取决于standard_conforming_strings设置E'pattern'
$$pattern$$
或$sometext$pattern$sometext$
第一个是标准SQL(特别是使用standard_conforming_strings),其他是PostgreSQL扩展。选择你喜欢的任何方法。
这里有一些例子:
SET standard_conforming_strings = 0;
SELECT
'Antonio De Sant''Ana Galvao Av Frei (Av 01 Parte A)'
~*
'Antonio De Sant\'Ana Galvao Av Frei \\(Av 01 Parte A\\)'
SET standard_conforming_strings = 1;
SELECT
'Antonio De Sant''Ana Galvao Av Frei (Av 01 Parte A)'
~*
'Antonio De Sant''Ana Galvao Av Frei \(Av 01 Parte A\)'
SELECT
'Antonio De Sant''Ana Galvao Av Frei (Av 01 Parte A)'
~*
E'Antonio De Sant\'Ana Galvao Av Frei \\(Av 01 Parte A\\)'
SELECT
'Antonio De Sant''Ana Galvao Av Frei (Av 01 Parte A)'
~*
$$Antonio De Sant'Ana Galvao Av Frei \(Av 01 Parte A\)$$
SET standard_conforming_strings = default;
答案 2 :(得分:1)
试试这个:
SELECT rua from logradouros where rua ~* E'Antonio De Sant\'Ana Galvao Av Frei \(Av 01 Parte A\)' limit 100;
参考:http://www.postgresql.org/docs/8.2/static/sql-syntax-lexical.html
答案 3 :(得分:0)
虽然每个其他响应都有帮助,但我认为使用引用函数是“正确”的方法。
来自docs:
quote_literal(string text)text返回适当引用的给定字符串,以用作SQL语句字符串中的字符串文字。嵌入式单引号和反斜杠适当加倍。请注意,quote_literal在null输入时返回null;如果参数可能为null,则quote_nullable通常更合适。另见例39-1。 quote_literal(E'O \'Reilly')'O''Reilly'
答案 4 :(得分:0)
只需使用2 '
'
select * from games where name = 'Ahmed''s Salah'
反斜杠(es)对我不起作用
答案 5 :(得分:0)
至于正则表达式,你必须在括号前面使用双反斜杠!!
E.g:
select regexp_matches('FOREIGN KEY (user_transaction_id) REFERENCES landing.user_transactions(id)', E'FOREIGN KEY \\((.*)\\) REFERENCES (.*)\\((.*)\\)', 'g');
<强>结果:强>
"{user_transaction_id,landing.user_transactions,id}"