2011-06-03 46 views

回答

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; 
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) 
0

雖然每隔響應幫助,我只是覺得用引號功能是這樣做的「正確」的方式。

docs

的quote_nullable(字符串文本)文本返回適當引用用作一個字符串在SQL語句中字符串字面量給定的字符串。嵌入式單引號和反斜槓適當加倍。請注意,quote_literal在null輸入時返回null;如果參數可能爲null,則quote_nullable通常更合適。另見例39-1。的quote_nullable(E'O \ 'Reilly的') 'O''Reilly'

0

只使用2 ''

select * from games where name = 'Ahmed''s Salah' 

反斜槓(ES)爲我

0

沒有工作而對於正則表達式,你必須在括號前面使用雙反斜線!

例如爲:

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