我需要连接正则表达式模式片段,对于这个模式,我使用 C 风格的 Escape E
。
如果使用连接运算符||
,则有效:
E'a{'||2||'}'
没有多大意义,但只是兴趣,如何连接相同,使用concat()
函数?
我需要连接正则表达式模式片段,对于这个模式,我使用 C 风格的 Escape E
。
如果使用连接运算符||
,则有效:
E'a{'||2||'}'
没有多大意义,但只是兴趣,如何连接相同,使用concat()
函数?
误解是这样的:C 风格的转义只是输入字符串文字的另一种方式。当您连接字符串时,无论是使用||
运算符还是使用concat()
函数(Postgres 9.1+),输入单个字符串的方法都无关紧要。
除此之外,其他类型的文字(例如2
您的示例中的数字常量)会被自动强制转换为text
。
\
最重要的是,您的示例在转义字符串(如)中没有显示任何具有特殊含义的字符。
SELECT E'a{' || 2 || '}';
SELECT concat(E'a{', 2, '}');
因此,E
在这个特定示例中完全无关紧要。
既然你提到了正则表达式模式:那些往往\
在其中,必须用\
符号E''
转义:
SELECT E'\\.' || 2 || '\.';
如果没有必要,现代方法是根本不使用转义字符串。这就是 Postgres 切换到standard_conforming_strings = ON
PostgreSQL 9.1 的原因。那是我测试的设置。