我可能有一个奇怪的请求。 我没有通过谷歌找到任何帮助。
我正在使用连接到PostgreSQL数据库的DbVisualizer Pro 10.0.15 gui工具。
我需要从数据库表创建一个 csv 文件。 我在查询中选择所需的记录,然后将结果导出到.csv文件。 我可以轻松做到这一点。
select note from notes;
highlight all results records >> right-click >> select export >> choose csv
某些记录的内容中同时使用单引号和/或双引号。
接收此文件的人需要将 csv 文件上传到另一个系统。 他们声明内容中的这些单引号和双引号在上传中不起作用。我被要求逃避这些引号。 他们希望将它们保留在内容中,但让它们出现在带有反斜杠转义字符的字段中,即:it is John's ball
会在 csv 文件中显示为:it is John's ball
. dbl引号也是如此。
创建 csv 文件后,我可能可以使用文本编辑器中的搜索和替换功能来做到这一点,但我想这可以通过 sql 完成。
我试过玩regexp_replace()
功能。
select regexp_replace(note, '"', '"') as notes from notes
处理 dbl 引号,但我在单引号上没有任何运气。
帮助? 有没有办法做到这一点?
您可以通过执行以下操作来转义双引号:
postgres=# SELECT REGEXP_REPLACE('this "is" a string', '"', '"', 'g');
regexp_replace
----------------------
this "is" a string
(1 row)
对于单引号,方法类似,但您必须使用另一个单引号对其进行转义。所以与其有像/'
这样的东西,不如''
。查询为:
postgres=# SELECT REGEXP_REPLACE('this ''is'' a string', '''', '''', 'g');
regexp_replace
----------------------
this 'is' a string
(1 row)
请注意最后的'g'
标志,这会强制它替换所有匹配项,而不仅仅是找到的第一个匹配项。
您也可以在单个语句中替换单引号和双引号,尽管它们被替换为相同的字符串(在本例中"
(。
postgres=# SELECT REGEXP_REPLACE('this "is" a ''normal'' string', '["'']', '"', 'g');
regexp_replace
---------------------------------
this "is" a "normal" string
(1 row)