我可能有一个奇怪的要求。我在Google上找不到任何帮助。
我正在使用连接到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-quotes也是一样。
创建csv文件后,我可能可以使用文本编辑器中的搜索和替换功能来做到这一点,但我想可以通过sql完成。
我尝试过使用regexp_replace()
函数。
select regexp_replace(note, '"', '\"') as notes from notes
适用于dbl引号,但单引号没有运气。
有帮助吗?有办法吗?
答案 0 :(得分:0)
您可以执行以下操作来转义双引号:
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)