Postgres 在文本字段中转义单引号和双引号

Postgres Escape Single and Double Quotes in Text Field

我可能有一个奇怪的要求。我没有通过 Google.

找到任何帮助

我正在使用连接到 PostgreSQL 数据库的 DbVisualizer Pro 10.0.15 gui 工具。

我需要从数据库创建一个 csv 文件 table。我 select 我在查询中需要的记录,然后将结果导出到 .csv 文件。我可以轻松做到。

select note from notes;

highlight all results records >> right-click >> select export >> choose csv

有些记录的内容中同时包含单 and/or 双引号。

接收此文件的人需要将 csv 文件上传到另一个系统。他们声明内容中的这些单引号和双引号在他们的上传中不起作用。我被要求避开这些引述。他们希望将它们保留在内容中,但让它们出现在带有反斜杠转义字符的字段中,即:it is John's ball 将在 csv 文件中显示为:it is John\'s ball。 dbl-quotes 也一样。

我可能可以在创建 csv 文件后使用文本编辑器中的搜索和替换功能来完成此操作,但我想这可以通过 sql.[=16= 完成]

我试过 regexp_replace() 函数。

select regexp_replace(note, '"', '\"') as notes from notes 适用于 dbl-quotes,但我对单引号没有任何运气。

帮忙?有办法吗?

您可以通过以下方式转义双引号:

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)