MySQL5.7.26版本,如何将表中某个字段的每一个证件号码单独取出来

MySQL5.7.26版本,如何将表中某个字段的每一个证件号码单独取出来,单独插入到另一个临时表中。
[420922199003172513,420922199003172311,42092219780312231X,420922194511123301]
[420922199506111322]
[42092219770212132X]
最终结果应该是这样
420922199003172513
420922199003172311
42092219780312231X
420922194511123301
420922199506111322
42092219770212132X
需求是想把这张表里面的这个字段的证件号码全部查出来,然后去重得出唯一的证件号码,最后插入到另一个表里面去。
我来答
添加附件
收藏
复制链接
微信扫码分享

在小程序上查看
分享
添加附件
问题补充
9条回答
默认
最新
create table teststr(ids varchar(1000));
insert into teststr
select '420922199003172513,420922199003172311,42092219780312231X,420922194511123301' union all
select '420922199506111322' union all
select '42092219770212132X' union all
select '123,567';
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ids,',',help_topic_id+1),',',-1) AS num
FROM
mysql.help_topic ,teststr
WHERE help_topic_id < LENGTH(ids)-LENGTH(REPLACE(ids,',',''))+1
复制
执行结果


打赏 1

展开全部评论(2条)
不用shell,用别的也可以,java、python、c都可以。这种涉及逻辑处理的,不适合在数据库执行,尤其你有几千万数据,mysql会被托的特别慢。


打赏 0
- 我也感觉shell更容易处理这种需求,把字段csv导出,shell处理一下,csv导入到新表,会容易很多。
- 我想到的SQL处理方法就是匹配字段长度或者通配“,” 做行转列然后插入去重,大于18位的直接插。


打赏 0
一模一样的数据写了一个
create table teststr(ids varchar(1000));
insert into teststr
select '[420922199003172513,420922199003172311,42092219780312231X,420922194511123301]' union all
select '[420922199506111322]' union all
select '[42092219770212132X]' union all
select '[123,567]';
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ids,',',help_topic_id+1),',',-1) AS num
FROM
mysql.help_topic , (select substr(ids,2,length(ids)-2) as ids from teststr) as t
WHERE help_topic_id < LENGTH(ids)-LENGTH(REPLACE(ids,',',''))+1
复制


打赏 0
回答交流
Markdown
一级标题
二级标题
三级标题
四级标题
五级标题
六级标题
添加图片链接
上传图片
导航目录
Markdown语法参考
请输入正文
提示
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
