Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 正则表达式仅用双引号替换第一个分号_Sql_Postgresql_Atom Editor - Fatal编程技术网

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

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

如何将该数据加载到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 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;