Sql 正则表达式仅用双引号替换第一个分号
有一个以分号分隔的数据转储 如何将该数据加载到Postgres SQL数据库Sql 正则表达式仅用双引号替换第一个分号,sql,postgresql,atom-editor,Sql,Postgresql,Atom Editor,有一个以分号分隔的数据转储 如何将该数据加载到Postgres SQL数据库 City;Latitude;Longitude London;51.50;0.12 Paris;48.85;2.35 我考虑使用Atom文本编辑器从这些数据中准备一个insert语句。 但是还有另一个挑战,第一个分号需要用一个引号和一个逗号来替换,以生成一个有效的insert语句 表的DDL: create table cities ( name varchar(100), Latitude floa
City;Latitude;Longitude
London;51.50;0.12
Paris;48.85;2.35
我考虑使用Atom文本编辑器从这些数据中准备一个insert语句。
但是还有另一个挑战,第一个分号需要用一个引号和一个逗号来替换,以生成一个有效的insert语句
表的DDL:
create table cities (
name varchar(100),
Latitude float,
Longitude float
);
insert语句应如下所示:
insert into cities values('London',51.50,0.12);
insert into cities values('Paris',48.85,2.35);
但我只能通过使用atom文本编辑器生成:
insert into cities values('London,51.50,0.12);
insert into cities values('Paris,48.85,2.35);
以上是通过用逗号代替分号来实现的。使用^
添加插入城市值('
开头和$
添加)添加中的代码>
所以问题是,atom文本编辑器应该使用什么正则表达式来替换第一次出现的分号?这应该可以:
查找:^(+);(.+);(.+)
替换:插入城市值('$1',$2,$3)代码>
(我推荐这个免费资源作为实验正则表达式的好方法:)您不需要预先编辑输入字符串,也不需要将每个条目单独插入;它可以在一个Insert语句中完成。您有一个包含已知组件数和分隔符的字符串,因此请使用函数regexp_split_to_数组分号(;)进行拆分。然后直接插入到表中,根据需要引用元素和类型转换。看
您还可以使用COPY从源文件加载暂存表,然后使用与上面基本相同的方法从中填充表。(也在演示中)
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;