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