MySQL 字符串截取函数及用法详解

2025-05-21 02:50

本文主要是介绍MySQL 字符串截取函数及用法详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST...

MySQL 字符串截取函数详解

在 MySQL 中,字符串截取是常见的操作,主要用于从字符串中提取特定部分。MySQL 提供了多种函数来实现这一功能,包括 LEFT()RIGHT()SUBSTRING()MID()SUBSTR()SUBSTRING_INDEX() 等。本文将详细介绍这些函数的用法,并通过示例进行说明。

LEFT(str, length):从左侧截取指定长度的字符

功能:从字符串 str 的左侧开始,截取 length 个字符。

语法

LEFT(str, length)

示例

SELECT LEFT('sqlstudy.com', 3);

结果

+-------------------------+
| LEFT('sqlstudy.com', 3) |
+-------------------------+
| sql |
+-------------------------+

解释:从 'sqlstudy.com' 的左侧开始,截取 3 个字符,结果为 'sql'

RIGHT(str, length):从右侧截取指定长度的字符

功能:从字符串 str 的右侧开始,截取 length 个字符。

语法

RIGHT(str, length)

示例

SELECT RIGHT('sqlstudy.com', 3);

结果

+--------------------------+
| RIGHT('sqlstudy.com', 3) |
+--------------------------+
| com |
+--------------------------+

解释:从 'sqlstudy.com' 的右侧开始,截取 3 个字符,结果为 'com'

SUBSTRING(str, pos) 或 SUBSTRING(str, pos, len):从指定位置开始截取

功能:从字符串 str 的第 pos 个字符开始,截取 len 个字符。pos 可以是正数或负数,正数表示从左侧开始,负数表示从右侧开始。

语法

SUBSTRING(str, pos)
SUBSTRING(str, pos, len)

示例

-- 从第 4 个字符开始,直到结束
SELECT SUBSTRING('sqlstudy.com', 4);
-- 从第 4 个字符开始,截取 2 个字符
SELECT SUBSTRING('sqlstudy.com', 4, 2);
-- 从倒数第 4 个字符开始,直到结束
SELECT SUBSTRING('sqlstudy.com', -4);
-- 从倒数第 4 个字符开始,截取 2 个字符
SELECT SUBSTRING('sqlstudy.com', -4, 2);

结果

+------------------------------+
| SUBSTRING('sqlstudy.com', 4) |
+------------------------------+
| study.com |
+------------------------------+

+---------------------------------+
| SUBSTRING('sqlstudy.com', 4, 2) |
+---------------------------------+
| st |
+---------------------------------+

+-------------------------------+
| SUBSTRING('sqlstudy.com', -4) |
+-------------------------------+
| .com |
+-------------------------------+

+----------------------------------+
| SUBSTRING('shttp://www.chinasem.cnqlstudy.com', -4, 2) |
+-------------http://www.chinasem.cn---------------------+
| .c |
+----------------------------------+

解释

  • SUBSTRING('sqlstudy.com', 4):从第 4 个字符开始,直到字符串结束,结果为 android'study.com'
  • SUBSTRING('sqlstudy.com', 4, 2):从第 4 个字符开始,截取 2 个字符,结果为 'st'
  • SUBSTRING('sqlstudy.com', -4):从倒数第 4 个字符开始,直到字符串结束,结果为 '.com'
  • SUBSTRING('sqlstudy.com', -4, 2):从倒数第 4 个字符开始,截取 2 个字符,结果为 '.c'

注意

len 必须为非负整数。若省略 len,则默认截取到字符串末尾。

pos 超出字符串长度或为 0,返回空字符串。例如:

SELECT SUBSTRING('abc', 0, 1);   -- 结果:空字符串
SELECT SUBSTRING('abc', 5, 1);   -- 结果:空字符串

SUBSTRING_INDEX(str, delim, count):根据分隔符截取字符串

功能:根据分隔符 delim,从字符串 str 中截取出第 count 次出现的分隔符前或后的子字符串。count 为正数时,从左侧开始计数;为负数时,从右侧开始计数。

语法

SUBSTRING_INDEX(str, delim, count)

示例

-- 截取第二个 '.' 之前的所有字符
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2);
-- 截取倒数第二个 '.' 之后的所有字符
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2);
-- 如果分隔符不存在,返回整个字符串
SELECT SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1);

结果

+------------------------------------------------+
| SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2) |
+------------------------------------------------+
| www.sqlstudy |
+------------------------------------------------+

+-------------------------------------------------+
| SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2) |
+-------------------------------------------------+
| com.cn |
+-------------------------------------------------+

+---------------------------------------------------+
| SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1) |
+---------------------------------------------------+
| www.sqlstudy.com.cn |
+---------------------------------------------------+

解释

  • SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', 2):返回第 2 次出现的 . 之前的所有字符,结果为 'www.sqlstudy'
  • SUBSTRING_INDEX('www.sqlstudy.com.cn', '.', -2):返回倒数第 2 次出现的 . 之后的所有字符,结果为 'com.cn'
  • SUBSTRING_INDEX('www.sqlstudy.com.cn', '.coc', 1):由于 .coc 不存在于字符串中,返回整个字符串 'www.sqlstudy.com.cn'

注意

count编程 超过分隔符实际出现的次数,返回整个字符串。例如:

SELECT SUBSTRING_INDEX('a.b.c.d', '.', 5);  -- 结果:'a.b.c.d'

MID(str, pos, len) 或 SUBSTR(str, pos, len):与 SUBSTRING 等价

功能:与 SUBSTRING 函数功能相同,用于从指定位置开始截取指定长度的子字符串。

语法

MID(str, pos, len)
SUBSTR(str, pos, len)

示例

-- 从第 4 个字符开始,截取 2 个字符
SELECT MID('sqlstudy.com', 4, 2);
-- 从倒数第 4 个字符开始,截取 2 个字符
SELECT SUBSTR('sqlstudy.com', -4, 2);

结果

+----------------------------------+
| MID('sqlstudy.com', 4, 2) |
+----------------------------------+
| st |
+----------------------------------+

+-----------------------------------+
| SUBSTR('sqlstudy.com', -4, 2) |
+-----------------------------------+
| .c |
+-----------------------------------+

解释

  • MID('sqlstudy.com', 4, 2)SUBSTRING('sqlstudy.com', 4, 2) 结果相同,均为 'st'
  • SUBSTR('sqlstudy.com', -4, 2)SUBSTRING('sqlstudy.com', -4, 2) 结果相同,均为 '.c'

多字节字符处理

MySQL 的字符串截取函数默认按字符(而非字节)处理,适用于多字节字符集(如 UTF-8)。例如:

SELECT LEFT('中文测试', 2);  -- 结果:'中文'
SELECT SUBSTRING('数据库', 2, 2);  -- 结果:'据库'

实际应用场景

场景 php1:提取邮箱的域名

SELECT 
  email,
  SUBSTRING_INDEX(email, '@', -1) AS domain
FROM users;

结果

+-------------------+-------------+
| email | domain |
+-------------------+-------------+
| user@example.com | example.com |
+-------------------+-------------+

场景 2:解析 URL 中的路径

SELECT 
  SUBSTRING_INDEX(SUBSTRING_INDEX(url, '//', -1), '/', 1) AS host
FROM website;

输入'https://www.sqlstudy.com/path'
输出'www.sqlstudy.com'

总结

函数功能概要核心区别
LEFT() / RIGHT()从左右侧截取固定长度方向固定,长度明确
SUBSTRING()灵活指定起始位置和长度支持正负位置,功能最全面
SUBSTRING_INDEX()基于分隔符截取适合处理结构化字符串(如路径)
MID() / SUBSTR()SUBSTRING 功能相同语法别名,可互换使用

掌握这些函数,可以高效处理字符串截取需求,提升数据处理的灵活性。

这篇关于MySQL 字符串截取函数及用法详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154698

相关文章

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

MySQL中的事务隔离级别详解

《MySQL中的事务隔离级别详解》在MySQL中,事务(Transaction)是一个执行单元,它要么完全执行,要么完全回滚,以保证数据的完整性和一致性,下面给大家介绍MySQL中的事务隔离级别详解,... 目录一、事务并发问题二、mysql 事务隔离级别1. READ UNCOMMITTED(读未提交)2

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

Python处理超大规模数据的4大方法详解

《Python处理超大规模数据的4大方法详解》在数据的奇妙世界里,数据量就像滚雪球一样,越变越大,从最初的GB级别的小数据堆,逐渐演变成TB级别的数据大山,所以本文我们就来看看Python处理... 目录1. Mars:数据处理界的 “变形金刚”2. Dask:分布式计算的 “指挥家”3. CuPy:GPU

MySQL Workbench工具导出导入数据库方式

《MySQLWorkbench工具导出导入数据库方式》:本文主要介绍MySQLWorkbench工具导出导入数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录mysql Workbench工具导出导入数据库第一步 www.chinasem.cn数据库导出第二步

Vue中插槽slot的使用示例详解

《Vue中插槽slot的使用示例详解》:本文主要介绍Vue中插槽slot的使用示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、插槽是什么二、插槽分类2.1 匿名插槽2.2 具名插槽2.3 作用域插槽三、插槽的基本使用3.1 匿名插槽

springboot+vue项目怎么解决跨域问题详解

《springboot+vue项目怎么解决跨域问题详解》:本文主要介绍springboot+vue项目怎么解决跨域问题的相关资料,包括前端代理、后端全局配置CORS、注解配置和Nginx反向代理,... 目录1. 前端代理(开发环境推荐)2. 后端全局配置 CORS(生产环境推荐)3. 后端注解配置(按接口