mysql 字符串的拆分之 substring_index()函数

本文介绍如何在MySQL中使用substring_index函数处理记录中的错误,如将包含多个字段值的algorithm,medium,80拆分成单独的tag、difficulty和duration。通过示例和题解展示了如何正确地提取和转换字段内容。
摘要由CSDN通过智能技术生成

语法

substring_index(string,delimiter,number)

string : 要分隔的字符串。

delimiter : 分隔符

number  :分隔符位置

注意

  • number  可以为正数,也可以为负数。

             正数时是指的是从左向右数,第 number 个分隔符左边的所有内容。

            负数时,指的是从右往左数,第 number 个分隔符右边的所有内容。

  • 当 number 的绝对值 大于 delimiter 的个数时,会将 string 全部输出
  • 个人理解(欢迎指正)

栗子

修复串列了的记录_牛客题霸_牛客网 (nowcoder.com)

描述

现有试卷信息表examination_info(exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间):

idexam_idtagdifficultydurationrelease_time
19001算法hard602021-01-01 10:00:00
29002算法hard802021-01-01 10:00:00
39003SQLmedium702021-01-01 10:00:00
49004算法,medium,8002021-01-01 10:00:00

录题同学有一次手误将部分记录的试题类别tag、难度、时长同时录入到了tag字段,请帮忙找出这些录错了的记录,并拆分后按正确的列类型输出。

由示例数据结果输出如下:

exam_idtagdifficultyduration
9004

算法

medium80

建表语句:

drop table if exists examination_info,exam_record;
CREATE TABLE examination_info (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    exam_id int UNIQUE NOT NULL COMMENT '试卷ID',
    tag varchar(32) COMMENT '类别标签',
    difficulty varchar(8) COMMENT '难度',
    duration int NOT NULL COMMENT '时长',
    release_time datetime COMMENT '发布时间'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

INSERT INTO examination_info(exam_id,tag,difficulty,duration,release_time) VALUES
  (9001, '算法', 'hard', 60, '2020-01-01 10:00:00'),
  (9002, '算法', 'hard', 80, '2020-01-01 10:00:00'),
  (9003, 'SQL', 'medium', 70, '2020-01-01 10:00:00'),
  (9004, '算法,medium,80','', 0, '2020-01-01 10:00:00');

题解:

select  exam_id,
        substring_index(tag,',',1) as tag,
        substring_index(substring_index(tag,',',2),',',-1)as difficuty,
 				cast(substring_index(tag,',',-1) as  DECIMAL) as duration
from examination_info
where tag like '%,%' ;
        

select  exam_id,
        
        substring_index(tag,',',2) as difficuty
 				
from examination_info
where tag like '%,%' ;

关于 cast()  的使用     Mysql 数据类型的转换之 cast()-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕.晨风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值