我需要连接正则表达式模式片段,对于这种模式,我使用C风格的Escape E
。
如果使用连接运算符||
,则工作:
E'a{'||2||'}'
没有多大意义,但只是使用concat()
函数进行连接,如何连接它?
答案 0 :(得分:1)
误解是:C风格的转义只是输入字符串文字的另一种方式。当您连接字符串时,无论是||
运算符还是concat()
函数(Postgres 9.1+), 单个字符串输入的方法无关< /强>
除此之外,其他类型的文字(例如示例中的数字常量2
)会自动强制转换为text
。
最重要的是,您的示例不会在转义字符串中显示任何具有特殊含义的字符(例如\
)。
SELECT E'a{' || 2 || '}';
SELECT concat(E'a{', 2, '}');
因此,E
在这个特定的例子中完全不相关。
由于您提到了正则表达式模式:其中包含\
,其中必须使用\
符号E''
进行转义:
SELECT E'\\.' || 2 || '\.';
如果没有必要,现代的方法是不来使用转义字符串。这就是Postgres用PostgreSQL 9.1切换到standard_conforming_strings = ON
的原因。这是我测试过的设置。