SQL - 如何在PostgreSQL中转义括号

时间:2011-06-03 15:53:23

标签: sql postgresql

我有以下sql命令,我需要在PostgreSQL中转义括号,我该怎么做?

SELECT rua 
  FROM logradouros 
 WHERE rua ~* 'Antonio De Sant\'Ana Galvao Av Frei (Av 01 Parte A)' 
 LIMIT 100;

6 个答案:

答案 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}"