题解 | #SQL 44.修复串列了的记录#

修复串列了的记录

http://www.nowcoder.com/practice/a5475ed3b5ab4de58e2ea426b4b2db76

明确题意:

部分记录的试题类别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 '%,%';
SQL进阶 文章被收录于专栏

SQL进阶step by step

全部评论
CAST( substring_index(tag, ',', -1) AS DECIMAL ) AS duration 不用转换数据类型也可以吧 虽然不转换也通过了
1 回复 分享
发布于 2022-03-23 21:08
duration为什么要cast一下,直接提取出来不是整型吗
点赞 回复 分享
发布于 2022-09-28 17:14 北京
细哦
点赞 回复 分享
发布于 2022-07-21 12:47
为什么是DECIMAL这个类型呢?我看示例输入的地方,duration 给的是INT类型呀
点赞 回复 分享
发布于 2022-04-25 16:25
取逗号之间的符号 能否用正则表达式筛选呢 有没有大佬指指路
点赞 回复 分享
发布于 2022-03-23 21:01

相关推荐

流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
评论
42
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务