• Mysql中 substring_index() 函数使用


    语法:substring_index(string,sep,num)

    即 substring_index (字符串,分隔符,序号),主要作用是用于截取目标字符串

    string:用于截取目标字符串的字符串。可为字段,表达式等。

    sep:分隔符,string存在且用于分割的字符,比如“,”、“.”等。

    num:序号,为非0整数。若为整数则表示从左到右数,若为负数则从右到左数。比如“www.mysql.com”截取字符‘www’,分割符为“.”,从左到右序号为1,即substring_index("www.mysql.com",'.',1);若从右开始获取“com”则为序号为-1即substring_index("www.mysql.com",'.',-1)

    案例一 截取指定位置:

    现有一个学生信息表student,详细地址address储存省、市、县等由逗号隔开的地址信息,比如“XX省,XX市,XX区,...,XXX号”。由于某种原因没有学生所在省信息需要获取,同时获取学生姓名name,性别sex,年龄age。

    1. select
    2. name,
    3. sex,
    4. age,
    5. substring_index(address,',',1) as province
    6. from
    7. student

    案例二:和cast函数结合使用截取某字符串并转为目标格式

    现有一张订单信息data,由于2022-03-04日期 之后存储日期信息的格式出错,日期前加了一些前缀,并用空格隔开,比如“13d 2022-02-01”,需要获取该表2022-03-04之后具体日期信息,同时获取单子offer_id,以及产品名name。

    1. select
    2. cast(substring_index(ctime,' ',-1) as date) as dt,
    3. offer_id,
    4. name
    5. FROM
    6. data
    7. WHERE
    8. substring_index(ctime,' ',-1) >= '2022-03-04'

    案例三:结合group_concat(),把多条记录回显到一条,再做分割

    比如一个用户可以维护多条学历信息记录,现在这个人维护了一所本科院校,俩所研究生院校,一所博士院校,现需要展示最高的一个学校,或者需要展示出所有的研究生院校。

    1. /*研究生毕业院校*/
    2. IF(
    3. SUBSTRING_INDEX(
    4. GROUP_CONCAT(
    5. CASE
    6. WHEN a02.R0205 = '11' //表示研究生
    7. THEN a02.R0203
    8. ELSE ','
    9. END
    10. ORDER BY a02.R0205, a02.R0206
    11. ),
    12. ',',
    13. 2
    14. ) = ',' // 如果没有
    15. ,'', // 返回空,否则,返回下面语句
    16. SUBSTRING_INDEX(
    17. GROUP_CONCAT(
    18. CASE
    19. WHEN a02.R0205 = '21'
    20. THEN a02.R0203
    21. END
    22. ORDER BY a02.R0205, a02.R0206
    23. ),
    24. ',',
    25. 2)
    26. ) AS dxbyyx,

    结果:

    中国人民大学,清华大学

  • 相关阅读:
    Ubuntu22.04版本安装对应版本ROS教程 (小白2024年)
    青龙面板-闲趣赚修复版
    【深蓝学院】手写VIO第4章--基于滑动窗口算法的 VIO 系统:可观性和 一致性--笔记
    WebSocket与SSE区别
    在 Maui 中自绘组件1:绘制
    面试题------B树和B+树的区别,以及为什么使用B+树而不用B树
    Linux(CentOS7)搭建LAMP服务环境
    若依——地址封装
    express promise async await promisify
    UML笔记
  • 原文地址:https://blog.csdn.net/w13966597931/article/details/127979378