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

目录

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 num
from user_submit
group by gender;

13.3 牛客练习题

SQL30 - 统计每种性别的人数

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

SQL32 截取出年龄

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/233254.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言 占位符 + 转义字符 + ASCLL 表 + 缓冲区

整型 占位符 取值范围 浮点型 占位符 转义字符 注意:绿色字体标注的为不可打印字符。 printf 常用占位符: printf 附加格式 ASCII 表 标准ASCII码的范围是0~127,只需7位二进制数即可表示。 缓冲区 缓冲区分类: sizeof(…

【数据结构】——排序篇(中)

前面我们已经了解了几大排序了,那么我们今天就来再了解一下剩下的快速排序法,这是一种非常经典的方法,时间复杂度是N*logN。 快速排序法: 基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码…

自动驾驶学习笔记(十六)——目标跟踪

#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo 社区开发者圆桌会》免费报名—>传送门 文章目录 前言 匹配关联 轨迹记录 状态预测 总结 前…

C++使用策略模式,减少使用switch...case...

目录 原理函数类模板函数使用switch...case...不使用switch...case... 知识点decltypestd::remove_reference 原理 函数 #include <iostream> #include <functional> #include <map>void fun1(int a, int b) {std::cout << "fun1 : a "<…

uniApp项目的创建,运行到小程序

一、项目创建 1. 打开 HBuilder X 2. 右击侧边栏点击新建&#xff0c;选择项目 3. 填写项目名&#xff0c;点击创建即可 注&#xff1a;uniapp中如果使用生命周期钩子函数&#xff0c;建议使用哪种 ?(建议使用Vue的) 二、运行 1. 运行前先登录 2. 登录后点击 manifest.js…

Linux和Windows环境下如何使用gitee?

1. Linux 1.1 创建远程仓库 1.2 安装git sudo yum install -y git 1.3 克隆远程仓库到本地 git clone 地址 1.4 将文件添加到git的暂存区&#xff08;git三板斧之add&#xff09; git add 文件名 # 将指定文件添加到git的暂存区 git add . # 添加新文件和修改过的…

golang开发之个微机器人的二次开发

简要描述&#xff1a; 下载消息中的文件 请求URL&#xff1a; http://域名地址/getMsgFile 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型…

测试用文章2

clion编辑器安装注意事项 clion是个非常优秀的cIDE&#xff0c;能大幅度提高我们写c的效率&#xff0c;最重要的是开箱即用。不过有些设置和注意事项&#xff0c;能让我们更好地使用clion 安装ideavim插件 vim插件&#xff0c;可以设置快捷键开启和关闭&#xff0c;推荐altf&am…

Windows下nginx的启动,重启,关闭等功能bat脚本

echo off rem 提供Windows下nginx的启动&#xff0c;重启&#xff0c;关闭功能echo begincls ::ngxin 所在的盘符 set NGINX_PATHG:::nginx 所在目录 set NGINX_DIRG:\projects\nginx-1.24.0\ color 0a TITLE Nginx 管理程序增强版CLSecho. echo. ** Nginx 管理程序 *** echo.…

文心ERNIE Bot SDK+LangChain:基于文档、网页的个性化问答系统

现在各行各业纷纷选择接入大模型&#xff0c;其中最火且可行性最高的形式无异于智能文档问答助手&#xff0c;而LangChain是其中主流技术实现工具&#xff0c;能够轻松让大语言模型与外部数据相结合&#xff0c;从而构建智能问答系统。ERNIE Bot SDK已接入文心大模型4.0能力&am…

平衡二叉树

AVL简称平衡二叉树&#xff0c;缩写为BBST&#xff0c;由苏联数学家 Adelse-Velskil 和 Landis 在 1962 年提出。 二叉树是动态查找的典范&#xff0c;但在极限情况下&#xff0c;二叉树的查找效果等同于链表&#xff0c;而平衡二叉树可以完美的达到 log ⁡ 2 n \log_2 n log2…

JVM 内存分析工具 Memory Analyzer Tool(MAT)的深度讲解

目录 一. 前言 二. MAT 使用场景及主要解决问题 三. MAT 基础概念 3.1. Heap Dump 3.2. Shallow Heap 3.3. Retained Set 3.4. Retained Heap 3.5. Dominator Tree 3.6. OQL 3.7. references 四. MAT 功能概述 4.1. 内存分布 4.2. 对象间依赖 4.3. 对象状态 4.4…

docker容器配置MySQL与远程连接设置(纯步骤)

以下为ubuntu20.04环境&#xff0c;默认已安装docker&#xff0c;没安装的网上随便找个教程就好了 拉去mysql镜像 docker pull mysql这样是默认拉取最新的版本latest 这样是指定版本拉取 docker pull mysql:5.7查看已安装的mysql镜像 docker images通过镜像生成容器 docke…

Git的安装以及SSH配置

前言 近期工作需要&#xff0c;所以版本管理工具要用到Git&#xff0c;某些操作需要ssh进行操作&#xff0c;在某次操作中遇到&#xff1a;git bash报错&#xff1a;Permission denied, please try again。经排查是ssh没有配置我的key&#xff0c;所以就借着这篇文章整理了一下…

典型的ETL使用场景

典型的ETL使用场景 ETL( Extract&#xff0c;Transform&#xff0c;Load)是一种用于数据集成和数据转换的常用技术。它主要用于从多个数据源中提取数据&#xff0c;对数据进行清洗、转换和整合&#xff0c;最后加载到目标系统中。ETL 的使用场景非常广泛&#xff0c;下面将介绍…

Windows系统Java开发环境安装

总结一下Java软件开发工程师常见的环境的安装&#xff0c;仅限Windows环境。 以下下载链接均来自官网&#xff0c;网络条件自己克服。 目录 1. JDKJDK Oracle 官网下载地址配置系统环境变量 2. Mavenapache maven 官网地址本地仓库和中央仓库配置配置系统环境变量 3. GitGit 官…

【Docker一】Docker架构、镜像操作和容器操作

一、docker基本管理和概念 1、概念 docker&#xff1a;开源的应用容器引擎。基于go语言开发的。运行在Linux系统中的开源的轻量级的“虚拟机” docker的容器技术可用在一台主机上轻松到达为任何应用创建一个轻量级到的&#xff0c;可移植的&#xff0c;自给自足的容器 dock…

二维码智慧门牌管理系统:提升管理效率

文章目录 前言一、快速准确录入&#xff1a;提高工作效率二、多样化支付&#xff1a;提供高效支付功能三、智能化管理&#xff1a;提高效率与准确性 前言 科技时代的必备工具 在当今科技高速发展的时代&#xff0c;二维码智慧门牌管理系统已成为各行业提高管理效率和准确性的重…

智能仪表板DevExpress Dashboard v23.1 - 支持自定义样式创建

使用DevExpress Analytics Dashboard&#xff0c;再选择合适的UI元素&#xff08;图表、数据透视表、数据卡、计量器、地图和网格&#xff09;&#xff0c;删除相应参数、值和序列的数据字段&#xff0c;就可以轻松地为执行主管和商业用户创建有洞察力、信息丰富的、跨平台和设…

C语言——字符函数和字符串函数(一)

&#x1f4dd;前言&#xff1a; 这篇文章对我最近学习的有关字符串的函数做一个总结和整理&#xff0c;主要讲解字符函数和字符串函数&#xff08;strlen&#xff0c;strcpy和strncpy&#xff0c;strcat和strncat&#xff09;的使用方法&#xff0c;使用场景和一些注意事项&…