文档章节

mysql根据分隔符进行字段拆分

无知的小狼
 无知的小狼
发布于 05/20 16:39
字数 545
阅读 3
收藏 0
  1. 虽然已经有很多类似的写法,我这里还是自己写一写,有些分隔符分出的列数是不固定的,这时候怎么根据分隔符拆分出多列呢
insert into tpems.sp_questions_bank (id, title, option_a, option_b, option_c, option_d, option_e, answer1, answer2, parse, qtpye, diff, md5, subjectId, gradeId, knowledges, area, year, paperTpye, source, fromSite, isSub, isNormal, isKonw, tiid, Similarity, isunique, md52, s_type, s_qid, s_pid, s_user_id, s_user_name, s_option_number, s_status, s_create_time, s_last_update_time, s_is_exercise, s_select_number
)
SELECT 
    null,
    t.title,
    IF(t.opi >= 1, t.option_a, '') a,
    IF(t.opi >= 2, t.option_b, '') b,
    IF(t.opi >= 3, t.option_c, '') c,
    IF(t.opi >= 4, t.option_d, '') d,
    IF(t.opi >= 5, t.option_e, '') e,
    t.answer,
    null,
    t.description, 
    t.type,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    0,
    t.id,
    t.pid,
    t.user_id,
    t.user_name,
    t.option_number,
    t.status,
    t.create_time,
    t.last_update_time,
    t.is_exercise,
    t.select_number
FROM
    (SELECT 
            sp.id,
            sp.user_id,
            sp.type,
            sp.title,
            sp.user_name,
            sp.option_number,
            sp.answer,
            sp.description,
            sp.status,
            sp.create_time,
            sp.last_update_time,
            sp.is_exercise,
            sp.pid,
            sp.select_number,
            (LENGTH(sp.option) - LENGTH(REPLACE(sp.option, '^^', ''))) / 2 + 1 AS opi,
            if(sp.type in(4,5,6),sp.option,SUBSTRING_INDEX(SUBSTRING_INDEX(sp.option, '^^', 1), '^^', - 1)) AS option_a,
            if(sp.type in(4,5,6),'',SUBSTRING_INDEX(SUBSTRING_INDEX(sp.option, '^^', 2), '^^', - 1)) as option_b,
            if(sp.type in(4,5,6),'',SUBSTRING_INDEX(SUBSTRING_INDEX(sp.option, '^^', 3), '^^', - 1)) as option_c,
            if(sp.type in(4,5,6),'',SUBSTRING_INDEX(SUBSTRING_INDEX(sp.option, '^^', 4), '^^', - 1)) as option_d,
            if(sp.type in(4,5,6),'',SUBSTRING_INDEX(SUBSTRING_INDEX(sp.option, '^^', 5), '^^', - 1)) as option_e
    FROM
        tpems.sp_question sp) t;

首先描述下我的sql的工作场景,有一列数据是用分隔符“^^”进行分隔的,一个字段里的值,然后需要把字段拆开,然后放到不同的option里面去, option有5个,然后字段里的分隔符的数目也是不固定的。 这里我是确定了一下最大的上限值,最多只能写5个,然后这样就简单了。

(LENGTH(sp.option) - LENGTH(REPLACE(sp.option, '^^', ''))) / 2 + 1 AS opi

确定了分隔符可以分出的列数。

然后判断选项的个数

    IF(t.opi >= 1, t.option_a, '') a,
    IF(t.opi >= 2, t.option_b, '') b,
    IF(t.opi >= 3, t.option_c, '') c,
    IF(t.opi >= 4, t.option_d, '') d,
    IF(t.opi >= 5, t.option_e, '') e,

这里解释下if函数,if(表达式,a,b) 表达式如果为真则返回a,否则返回b 所以这里的判断就是,如果只能分出两个option则,3,4,5的值都是空 ,就成功的将一列值扩充到多列

© 著作权归作者所有

上一篇: 建造者模式
无知的小狼
粉丝 5
博文 37
码字总数 23416
作品 0
浦东
程序员
私信 提问
十三、MySQL中表的优化 - 系统的撸一遍MySQL

数据类型检测 通过分析数据表的字段信息,进行数据优化。 通过这个查询,可以检查数据表字段实际使用的最大长度,最小长度平均长度,枚举信息等信息。可以辅助进行MySQL的优化(数据比较多的...

logbird
2016/11/14
22
0
使用Sqoop实现HDFS与Mysql互转

简介 Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入...

疯狂的艺术家
2013/05/10
0
1
自动生成web服务器日志解析规则

当前web服务器的多样化使得访问日志的数据清洗变得越来越复杂,企业需要投入专业的数据清洗人员编写数据清洗规则(解析规则或者解析正则),或者需要关心web服务器访问日志的生成规则。手写w...

Mr_zebra
2018/11/14
0
0
互联网mysql表设计

互联网数据存储层,如果使用到关系型的数据库,很多公司都会采用mysql。同理传统软件的mysql使用率也是很高,怎么设计很好的数据库表结构,每个人都有自己的准则和标准。也许根据对应的业务需...

wangshuaixin
2016/12/22
91
0
Mac OSX下SQLite3的入门级使用

窗外杭州迎来了今年的初雪,很棒。本来想配两张朋友圈的照片,但只能传200K以下的就不修了。直接记录下自己接触的SQLite3的入门吧,还好之前用过Oracle和MySQL,上手还蛮快的。 一、MAC OSX...

vincentwu08
2015/12/06
152
0

没有更多内容

加载失败,请刷新页面

加载更多

2019年普通高校在川招生专业及名额介绍文科 带学费

2019年普通高校在川招生专业及名额介绍文科 带学费

asdtiang
12分钟前
0
0
springCloud配置中心config配置svn(踩坑记录)(基于consul)

新建一个config Server模块; 引入如下依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId></dependency>......

为何不可1995
12分钟前
0
0
mysql相关tips(持续更新)

1.字符集:utf8mb4 mysql 5.5.3之后出来的字符集,占用1-4个字节,最大占用的字节数为4.目前这个字段主要应用在(Emoji表情)。utf8mb4兼容utf8(1-3个字节),且比utf8能表示更多的字符。什...

lara_
12分钟前
0
0
微服务开源生态报告 No.1

从关注开源,到使用开源,再到参与开源贡献,越来越多的国内开发者通过开源技术来构建业务。 截止目前,Arthas / Dubbo / ChaosBalde / Nacos / RocketMQ / Seata / Sentinel / Spring Clou...

阿里云官方博客
15分钟前
1
0
MaxCompute 费用暴涨之存储压缩率降低导致SQL输入量变大

现象:同样的SQL,每天处理的数据行数差不多,但是费用突然暴涨甚至会翻数倍。 分析: 我们先明确MaxCompute SQL后付费的计费公式:一条SQL执行的费用=扫描输入量 ️ SQL复杂度 ️ 0.3(¥/GB...

zhaowei121
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部