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



我可能有一个奇怪的请求。 我没有通过谷歌找到任何帮助。

我正在使用连接到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)

相关内容

  • 没有找到相关文章

最新更新