当前位置:   article > 正文

MySql-substring函数和substring_index函数的使用及练习_mysql substring

mysql substring

目录

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. 实例练习

建表语句

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

order_detail表

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

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

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

代码:

  1. select order_id,order_time,
  2. substring(order_time,1,4) as 'order_year',
  3. substring(order_time,6,2) as 'order_month',
  4. substring(order_time,9,2) as 'order_day'
  5. 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

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

结果:

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

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

结果:

6. 实例练习2

建表语句

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

user_submit表

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

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

代码:

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

13.3 牛客练习题

SQL30 - 统计每种性别的人数

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

SQL32 截取出年龄

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/896814
推荐阅读
相关标签
  

闽ICP备14008679号