有一个以分号分隔的数据转储。
如何将该数据加载到 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/