MySql-substring函数和substring

MySql-substring函数和substring

码农世界 2024-05-29 后端 103 次浏览 0个评论

目录

13.2.1 substring函数

1. 概述

2. 使用格式

3. 参数列表

4. 实例练习

13.2.2 substring_index函数

1. 概述

2. 格式

3. 参数说明

4. 返回值

5. 实例练习1

6. 实例练习2

13.3 牛客练习题


13.2.1 substring函数

1. 概述

substring函数是文本处理函数,可以用来截取字符串

2. 使用格式

格式: SUBSTRING(s, index, len)

从字符串s的index位置截取长度为len的子字符串

3. 参数列表

  • 如果SUBSTRING()函数接收2个参数:SUBSTRING(s,index),则第一个参数为待截取的字符串,第二个参数为截取的起始位置。如果第二个参数为负整数,则为倒数的起始位置

    以字符串“abc123”为例(SUBSTRING()函数接收两个参数)

    操作示例

    示例结果

    SELECT SUBSTRING('abc123',2)

    bc123

    SELECT SUBSTRING('abc123',-3)

    123

    如果SUBSTRING()函数接收3个参数:SUBSTRING(s,start,length),则第一个参数为待截取的字符串,第二个参数为截取的起始位置,第三个参数为截取的长度。如果第二个参数为负整数,则为倒数的起始位置

      以字符串“abc123”为例(SUBSTRING()函数接收3个参数)

    操作示例

    示例结果

    SELECT SUBSTRING('abc123',2,3)

    bc1

    SELECT SUBSTRING('abc123',-3,2)

    12

    4. 实例练习

    建表语句

    -- 建表语句
    DROP TABLE IF EXISTS order_detail; 
    CREATE TABLE order_detail( 
    order_id VARCHAR(8), 
    order_time VARCHAR(32) 
    ) 
    ENGINE = InnoDB 
    DEFAULT CHARSET = utf8; 
    INSERT INTO 
    order_detail (order_id,order_time) 
    VALUE ('o001','2020-06-15 09:12:33') 
    ,('o002','2020-06-15 13:24:09') 
    ,('o003','2020-06-16 10:44:24') 
    ,('o004','2020-06-17 08:05:52') 

    order_detail表

    MySql-substring函数和substring

    问题:现有一张订单表,order_time字段是精确到秒的字符串格式的时间,需查询并获取每个订单的”年“、”月“、”日“,即衍生出3个新字段

    注意:表中的时间是字符串格式的,因此可以使用SUBSTRING()函数提取年、月、日

    根据示例,你的查询应返回以下结果:

    MySql-substring函数和substring

    代码:

    select order_id,order_time,
           substring(order_time,1,4) as 'order_year',
           substring(order_time,6,2) as 'order_month',
           substring(order_time,9,2) as 'order_day'
    from order_detail;

    13.2.2 substring_index函数

    1. 概述

    substring_index函数用于按照指定分隔符截取字符串

    2. 格式

    substring_index(str, delimiter, number)

    返回从字符串str的第number个出现的分隔符delimiter之前的子串;

    如果number是正数,那么就是从左往右数,返回第number个分隔符的左边的全部内容;

    相反,如果number是负数,那么就是从右边开始数,第number个分隔符右边的所有内容

    注意:如果number超过了实际分隔符的个数,则返回实际个数的字符串

    3. 参数说明

    str: 待截取的字符串,string类型

    delimiter: 分隔符,string类型

    number: 指定分隔符位置,int类型

    4. 返回值

    返回STRING类型字符串,如果任一输入参数为NULL,则返回NULL

    5. 实例练习1

    1) 返回从左往右数的第一个出现的*之前的字串

    select substring_index('a*b','*',1);

    结果:

    MySql-substring函数和substring

    2)返回从右往左数的第一个*之前的字串

    select substring_index("a*b",'*',-1);

    结果

    MySql-substring函数和substring

    3)返回a*b*c*d*e中的c

    可分成两步去获取

    ①返回第三个*出现之前的字串

    select substring_index('a*b*c*d*e','*',3);

    结果:

    MySql-substring函数和substring

    ②将上面的字串作为参数,获取该字符串从右往左数的第一个*出现前的字串

    select substring_index(substring_index('a*b*c*d*e','*',3),'*',-1);

    4)如果任一输入参数为null,则返回null

    select substring_index("http:///www.baidu.com",null,2) as str1,
           substring_index("http:///www.baidu.com",'.',null) as str2,
           substring_index("http:///www.baidu.com",'.',2) as str3;

    结果:

    MySql-substring函数和substring

    5)如果number超过了实际分隔符的个数,则返回实际个数的字符串

    # http:///www.baidu.com有两个'.'
    select substring_index("http:///www.baidu.com",'.',3);

    结果:

    MySql-substring函数和substring

    6. 实例练习2

    建表语句

    drop table if exists user_submit;
    CREATE TABLE `user_submit` (
    `id` int NOT NULL,
    `device_id` int NOT NULL,
    `profile` varchar(100) NOT NULL,
    `blog_url` varchar(100) NOT NULL
    );
    INSERT INTO user_submit VALUES(1,2138,'180cm,75kg,27,male','http:/url/bisdgboy777');
    INSERT INTO user_submit VALUES(2,3214,'165cm,45kg,26,female','http:/url/dkittycc');
    INSERT INTO user_submit VALUES(3,6543,'178cm,65kg,25,male','http:/url/tigaer');
    INSERT INTO user_submit VALUES(4,4321,'171cm,55kg,23,female','http:/url/uhsksd');
    INSERT INTO user_submit VALUES(5,2131,'168cm,45kg,22,female','http:/url/sysdney');

    user_submit表

    MySql-substring函数和substring

    问题:现在运营举办了一场比赛,收到了一些参赛申请,表数据记录形式如上所示,现在运营想要统计每个性别的用户分别有多少参赛者,请取出相应结果

    根据示例,你的查询应返回以下结果:

    MySql-substring函数和substring

    代码:

    select substring_index(profile,',',-1) as gender,count(*) as num
    from user_submit
    group by gender;

    13.3 牛客练习题

    SQL30 - 统计每种性别的人数

    SQL31- 截取出博客URL中的用户名

    SQL32 截取出年龄

转载请注明来自码农世界,本文标题:《MySql-substring函数和substring》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,103人围观)参与讨论

还没有评论,来说两句吧...

Top