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。

select 
    name,
    sex,
    age,
    substring_index(address,',',1) as province
from 
    student

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

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

select 
    cast(substring_index(ctime,' ',-1) as date) as dt,
    offer_id,
    name    
FROM 
    data
WHERE 
    substring_index(ctime,' ',-1) >= '2022-03-04'

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

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

/*研究生毕业院校*/
IF(
	SUBSTRING_INDEX(
		GROUP_CONCAT( 
            CASE 
            WHEN a02.R0205 = '11' //表示研究生
                THEN a02.R0203 
                ELSE ',' 
            END 
            ORDER BY a02.R0205, a02.R0206 
        ),
		',',
		2
	) = ','  // 如果没有
    ,'',     // 返回空,否则,返回下面语句
	SUBSTRING_INDEX(
		GROUP_CONCAT( 
            CASE 
            WHEN a02.R0205 = '21' 
                THEN a02.R0203 
            END 
            ORDER BY a02.R0205, a02.R0206 
        ),
	',',
	2)
) AS dxbyyx,

结果:

中国人民大学,清华大学

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值