小工具知识网

当前位置: 首页 > 行业知识 > MySql-substring函数和substring

行业知识

MySql-substring函数和substring

2026-11-03 06:28:57 来源:互联网转载

目录

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表

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

    注意:表中的时间是字符串格式的,因此可以使用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);

    结果:

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

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

    结果

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

    可分成两步去获取

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

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

    结果:

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

    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;

    结果:

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

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

    结果:

    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表

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

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

    代码:

    select substring_index(profile,',',-1) as gender,count(*) as numfrom user_submitgroup by gender;

    13.3 牛客练习题

    SQL30 - 统计每种性别的人数

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

    SQL32 截取出年龄

上一篇:滑皮金桔泡水秘诀大揭秘,轻松制作美味饮品,享受清新口感!

下一篇:新站怎么坐做优化?