postgresql - Postgres 在文本字段中转义单引号和双引号
问题描述
我可能有一个奇怪的要求。我没有通过 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,但我对单引号没有任何运气。
帮助?有没有办法做到这一点?
解决方案
您可以通过以下方式转义双引号:
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)
推荐阅读
- python - openpyxl 正在覆盖 Excel 中 win32 宏所做的任何工作
- sql-server - 删除 SQL Sharepoint Reporting Services 2012
- javascript - 当另一个组件的状态发生变化时如何重新加载组件 React
- c# - 为 ngx-bootstrap DateTimePicker 获取从 C# API 到 Angular 的日期
- rust - Rust 异步函数可以在不导入 Future 特征的情况下工作吗?
- c++ - 是否可以使用 O(1) 复杂度的 openMP 初始化向量?(C++)
- node.js - 通过 Express-Sessions 和 mongo-connect 访问 Mongoose Schema 方法
- java - OneToOne 与休眠 JPA
- youtube-api - youtube api 搜索响应意外数据
- laravel - 如何在自定义中间件中通过 Laravel 中的用户 ID 对用户进行身份验证