MySQL 按关键字截取字符串

SUBSTRING_INDEX(s, delimiter, number)

返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。
如果 number 是正数,返回(从左边数)第 number 个 delimiter  左边的字符串 。
如果 number 是负数,返回(从右边数)第 number 的绝对值个 delimiter  右边的字符串。

起始不含delimiter。

SELECT SUBSTRING_INDEX('a*b','*',1) -- a
SELECT SUBSTRING_INDEX('a*b','*',-1)    -- b
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1)    -- c

举个栗子

有 person 表和 level 表分别如下:

 idnamedesc
1大佬-A
2巨佬-B
3C

 idleveldesc
1大佬dalao
2巨佬

第一题:查 person , 只含人名

select SUBSTRING_INDEX(`name`,'-',-1) from `person`;

第二题:把level表里 `大佬`的 desc 给到 person表里的大佬

update person a 
    left join `level` b 
        on SUBTRING_INDEX(a.`name`, '-', -1) = b.`level`
set a.`desc` = b.`desc`
where b.`level` = '大佬'

这种方案是人肉批量处理数据(此乃记录这篇博文的起因)的一种权宜之法, 一般用临时表。

项目中还是尽量的满足设计范式:所有属性都不能再分解。

最起码,不应该合并关键属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值