sql - 正则表达式仅用双引号替换第一个分号

标签 sql postgresql atom-editor

有一个以分号分隔的数据转储。

如何将该数据加载到 Postgres SQL 数据库?

City;Latitude;Longitude
London;51.50;0.12
Paris;48.85;2.35

我想使用 Atom 文本编辑器从这些数据中准备插入语句。 但是还有另一个挑战,第一个分号需要用单引号和逗号替换才能形成有效的插入语句。

表的 DDL:

create table cities (
    name varchar(100),
    Latitude float,
    Longitude float
);

插入语句应如下所示:

insert into cities values('London',51.50,0.12);
insert into cities values('Paris',48.85,2.35);

但是我只能使用原子文本编辑器生成这个:

insert into cities values('London,51.50,0.12);
insert into cities values('Paris,48.85,2.35);

上面是通过用逗号替换分号来实现的。使用 ^ 添加 insert into city values(' 在开头,使用 $ 添加 ); 在添加中.

所以问题是,原子文本编辑器应该使用什么正则表达式来替换第一次出现的分号?

最佳答案

您无需预先编辑输入字符串,也无需将每个条目分隔为单独的插入内容;它可以在一个 Insert 语句中完成。您有一个包含已知数量组件和分隔符的字符串,因此请使用函数 regexp_split_to_array 通过分号 (;) 进行分割。然后直接插入到表中,引用元素并根据需要进行类型转换。请参阅Demo .

with loc( loc_str) as ( values('London;51.50;0.12'), ('Paris;48.85;2.35')) 
insert into cities(name, latitude, longitude) 
     select loc_part[1], loc_part[2]::float,loc_part[3]::float
       from ( select regexp_split_to_array(loc_str,';') loc_part from loc) l;

您还可以使用 COPY 从源文件加载临时表,然后使用与上面基本相同的方法从中填充表。 (也在演示中)

关于sql - 正则表达式仅用双引号替换第一个分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67657027/

相关文章:

Android - 通知观察者 sqlite 查询/ View 的变化

python - 有没有办法让原子编辑器在导入时自动打开与特定 python 模块相关的文档?

sql - hive collect_set 数组操作

ruby-on-rails - 可以从 Rails 应用程序执行 psql 命令吗

sql - 在 postgresql 中比较 `bigint` 和 `date` 的运算符到底是什么?

python - 向外键字段添加详细名称时出现 django 1.7 迁移错误

html - 如何修复打开页面时按钮转换为带边框的自定义按钮?

view - Atom 编辑器 - 如何修复 : Only one tab open at a time

php - 使用 PHP PDO 查询 MySQL 中的 DATE

mysql - 插入多个值时 Node mysql 上的“ER_PARSE_ERROR”