Mar*_*rco 7 sql postgresql escaping
我们说我的桌子是:
id text
+-----+----------+
123 | foo bar
321 | bar "baz"
Run Code Online (Sandbox Code Playgroud)
在倾销时有没有办法逃避'baz'周围的那些报价?
我的查询形式如下:
SELECT text FROM aTable WHERE ...
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
foo bar
bar \"baz\"
Run Code Online (Sandbox Code Playgroud)
而不是:
foo bar
bar baz
Run Code Online (Sandbox Code Playgroud)
您可能想要使用replace
:
SELECT REPLACE(text, '"', E'\\"') FROM aTable WHERE ...
Run Code Online (Sandbox Code Playgroud)
您需要转义转义字符以获取文字反斜杠(因此加倍反斜杠)并在替换字符串上使用"E"前缀以获得正确的转义语法.
更新:感谢a_horse_with_no_name通常的严格(BTW是一件好事),我们有一个解决方案,不需要额外的反斜杠或非标准的"E"前缀:
set standard_conforming_strings = on;
SELECT REPLACE(text, '"', '\"') FROM aTable WHERE ...
Run Code Online (Sandbox Code Playgroud)
该standard_conforming_strings
选项告诉PostgreSQL使用SQL字符串的标准语法:
这控制普通的字符串文字('...')是否按字面意思处理反斜杠,如SQL标准中所规定的那样.
这也会影响你的\x5C
逃生:
如果配置参数standard_conforming_strings已关闭,则PostgreSQL会识别常规和转义字符串常量中的反斜杠转义.这是为了向后兼容历史行为,其中始终识别反斜杠转义.
归档时间: |
|
查看次数: |
20452 次 |
最近记录: |