【问题标题】:Postgres Escape Single and Double Quotes in Text FieldPostgres 在文本字段中转义单引号和双引号
【发布时间】:2019-12-17 06:00:47
【问题描述】:

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

帮助?有没有办法做到这一点?

【问题讨论】:

  • csv是如何上传到其他系统的?如果该人在上传期间逃脱了所有实例,您可以避免转义所有实例。例如。如果您使用 Python 的 csv 库将 csv 文件写入数据库,则转义会自动完成,而无需担心手动进行。
  • 谢谢,...是的,我们尝试过建议。该文件被发送给我们部门/学校以外的人。该人要么不想这样做,要么不知道如何做或其他事情,所以这取决于我。我们无法控制他们如何做到这一点。

标签: postgresql csv dbvisualizer


【解决方案1】:

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

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)

【讨论】:

  • 是的,是的!那行得通。我有 dbl-quotes,但单曲正在杀死我。我有正则表达式''' 的第一部分,但是替换为我很适合。太感谢了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 2011-06-13
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
相关资源
最近更新 更多