SQL44 修复串列了的记录

题目主要信息:

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

问题拆解:

  • 判断本条记录是否录入错误。知识点:LIKE, LENGTH
    • 判断 tag 字段中是否包含 ','
    • 判断 difficulty 长度为 0
    • 判断 duration 为 0
  • 通过 SUBSTRING_INDEX 对错误输入的 tag 字段进行拆分。
    • SUBSTRING_INDEX(str, delim, count) 有三个参数,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容。如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容。
    • SUBSTRING_INDEX(tag, ',', 1) 可以获得左数第一个内容 tag,SUBSTRING_INDEX(tag, ',', -1) 获得右数第一个 duration
    • SUBSTRING_INDEX(SUBSTRING_INDEX(tag, ',', 2), ',', -1) 切分两次,获得中间位置的 difficulty

代码:

SELECT
    exam_id,
    SUBSTRING_INDEX(tag, ',', 1),
    SUBSTRING_INDEX(SUBSTRING_INDEX(tag, ',', 2), ',', -1),
    SUBSTRING_INDEX(tag, ',', -1)
FROM
    examination_info
WHERE
    tag LIKE '%,%'
    AND LENGTH(difficulty) = 0
    AND duration = 0