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

时间:2019-08-09 13:21:12

标签: postgresql csv dbvisualizer

我可能有一个奇怪的要求。我在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引号,但单引号没有运气。

有帮助吗?有办法吗?

1 个答案:

答案 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)