明确题意:

部分记录的试题类别tag、难度、时长同时录入到了tag字段,找出这些录错了的记录,并拆分后按正确的列类型输出。


问题分解:

  • 筛选出录错了的记录:WHERE tag LIKE '%,%'
  • 提取tag,第一个逗号前的值:substring_index(tag, ',', 1) AS tag
  • 提取难度,第二个逗号前倒数第一个逗号后:substring_index(substring_index(tag, ',', 2), ',', -1) AS difficulty
  • 提取时长,最后一个逗号后,并类型转换:CAST( substring_index(tag, ',', -1) AS DECIMAL ) AS duration

细节问题:

  • 表头重命名:as

完整代码:

SELECT exam_id,
    substring_index(tag, ',', 1) AS tag,
    substring_index(substring_index(tag, ',', 2), ',', -1) AS difficulty,
    CAST( substring_index(tag, ',', -1) AS DECIMAL ) AS duration
FROM examination_info
WHERE tag LIKE '%,%';