正则表达式分割数据并存放入数据库

问题描述:数据库表中一个字段的数据为:

奥迪A120121.4TFSIUrban

奥迪A120121.4TFSIEgo

奥迪A120121.4TFSIEgoplus

奥迪A1201330TFSISportbackUrban

奥迪A1201330TFSISportbackEgo

奥迪A1201330TFSISportbackEgoplus

要求:将该类数据按第一个空格分割成两份,分别存放到表中的两个字段中。

第一种方法:使用正则表达式将字符串的第一个空格替换成‘\t’(制表符),然后通过sql命令导入数据库中。但是我在写正则表达式的时候不知道如何选择每行数据的第一空格,因为每行数据都有多个空格;后来的解决方法是先把数据导出来两份,第一份数据把第一个空格后面的数据删除,得到“奥迪A1”,然后再把另一份数据的第一个空格前面的数据删除,得到“20121.4TFSIUrban”,从而实现了一份数据的分割。

① 如何把第一个空格后面的数据删除

使用Emeditor文本编辑器,在替换选项卡中查找框中输入【\s.*】,勾选使用正则表达式,然后点击替换全部按钮,即可将第一个空格后面的数据删除

② 如何把第一个空格前面的数据删除

这是最难的问题!使用Emeditor文本编辑器,在替换选项卡中查找框中输入【^(?:\S*?)(\s)】,勾选使用正则表达式,然后点击替换全部按钮,即可将第一个空格前面的数据删除

经过以上两步,我们就得到了两份分割好的数据了,现在就可以把数据导入数据库中的表里去了,因为我们把数据分成两份不同的文件,但是需要导入到同一张表里的不同字段里,这里使用命令行写sql语句,在表中导入导入单个字段的sql语句为:

loaddatalocalinfile'文件路径,如:D:\\id.txt'intotable表名linesterminatedby'\n'(字段名);

这个sql语句有个问题,就是一个表中只能导入一次,将第一份数据导入后,那下一份数据导入的时候,就必须把表里面的数据清空。我们是两份数据,需要在同一张表里导入两个字段的数据,所以,这个导入单个字段数据的方法也不行。

Ø这里补充一个知识点,如果我们不按上面的方法来做,而是把第一个空格替换成制表符,那么就不需要导入单个字段了,直接使用命令行导入表数据即可,sql语句为:loaddatalocalinfile'文件路径,如:D:\\data.txt'intotable表名fieldsterminatedby'\t';这个命令不存在以上的问题,可以直接导入。

接上面的问题,因为我们要的是将此类数据放入同一张表中的不同字段里,现在只能把这两份数据分别导入两张表里,然后使用多表查询,将查询出来的数据存放入一张新表里。

具体做法是:

1.数据库里新建Car_Series表和Car_Type表,使用导入单个字段的sql语句loaddatalocalinfile'文件路径,如:D:\\id.txt'intotable表名linesterminatedby'\n'(字段名);将“奥迪A1”导入到Car_Series表,将“20121.4TFSIUrban”导入到Car_Type

2.值得一说的是:.txt或者Excel数据,都会认在每一条后面加上一个回车符,导入到数据库后,就不能通过查询语句查询出来,这个时候,就需要把数据后面的回车符清除。清除的方法是:

sqlupdatetableNamesetcolumnName=rtrim(ltrim(replace(columnName,char(13),'')));

其他控制字符:制表符char(9)|换行符char(10)|回车符char(13).

3.使用左连接查询出数据:selectSeries,TypefromCar_SeriesleftjoinCar_TypeonCar_Series.CarID=Car_Type.CarID;

4.查询出来的数据放入到新的表中:createtableCarselectSeries,TypefromCar_SeriesleftjoinCar_TypeonCar_Series.CarID=Car_Type.CarID;(这条语句会把数据放入到一个即时创建出来的新表中,如果想放入到一个已经创建好的表中,则使用:insertintoCarselectSeries,TypefromCar_SeriesleftjoinCar_TypeonCar_Series.CarID=Car_Type.CarID;

附:这个功能最后实现的其实是三张表,但方法都是一样的,只是左连接的sql语句不同而已。左连接三张表实例:select*fromaleftjoinbona.id=b.idleftjoincona.id=c.id

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...