美文网首页
SUBSTRING_INDEX用法

SUBSTRING_INDEX用法

作者: 闪闪亮晶晶mi | 来源:发表于2024-01-03 18:56 被阅读0次

    1. 定义

    SUBSTRING_INDEX(str, delim, count)
    str: 原始字符串,从中提取子字符串。
    delim: 用于分隔字符串的分隔符。
    count: 分隔符的序号

    • 负数时表示从后往前数的第N个,例如-2表示从后往前数的第二个分隔符之后的所有内容
    • 正数时表示从前往后数的第N个,例如2表示从前往后数的第二个分隔符之前的所有内容

    2.举例

    (1)count是1的时候

    SELECT SUBSTRING_INDEX('苹果,香蕉,橙子', ',', 1);
    

    这将返回 苹果,因为它提取了第一个逗号之前的子字符串。
    (2)count是-1的时候

    SELECT SUBSTRING_INDEX('苹果,香蕉,橙子', ',', -1);
    

    这将返回 橙子,因为它提取了最后一个逗号之后的子字符串。
    (2)计数大于出现次数

    SELECT SUBSTRING_INDEX('苹果,香蕉,橙子', ',', 5);
    

    这将返回整个字符串,因为计数超过了分隔符的出现次数。

    3.需求:求薪资最大值和最小值

    -- 1、统一单位,未转换成元/月,那么千/月的用户需要乘以1000,万/月的用户需要乘以10000,万/年的用户需要乘以10000/12=833

    create view data_salary_unit as
    select *,(case 
        when salary like '%千/月' then 1000
        when salary like '%万/月' then 10000
        when salary like '%万/年' then 833 end) as unit
        from course
    

    -- 2.在2的基础上取出薪资的最大值和最小值,先切割再乘以单位

    SELECT
        *,case
        when unit = 1000 then CAST(SUBSTRING_INDEX(SUBSTRING_INDEX( salary, '千/月', 1 ), '-', 1 ) as decimal(6,2)) *unit
        when unit = 10000 then CAST(SUBSTRING_INDEX(SUBSTRING_INDEX( salary, '万/月', 1 ), '-', 1 ) as decimal(6,2)) *unit
        when unit = 833 then CAST(SUBSTRING_INDEX(SUBSTRING_INDEX( salary, '万/年', 1 ), '-', 1 ) as decimal(6,2)) *unit
        end AS min_salary,
        case
        when unit = 1000 then CAST(SUBSTRING_INDEX(SUBSTRING_INDEX( salary, '千/月', 1 ), '-', -1 ) as decimal(6,2)) *unit
        when unit = 10000 then CAST(SUBSTRING_INDEX(SUBSTRING_INDEX( salary, '万/月', 1 ), '-', -1 ) as decimal(6,2)) *unit
        when unit = 833 then CAST(SUBSTRING_INDEX(SUBSTRING_INDEX( salary, '万/年', 1 ), '-', -1 ) as decimal(6,2)) *unit
        end AS max_salary
    FROM
        data_salary_unit
    

    行后结果


    image.png

    相关文章

      网友评论

          本文标题:SUBSTRING_INDEX用法

          本文链接:https://www.haomeiwen.com/subject/yfhvndtx.html