MySQL如何从数据中截取所需要的字符串

本文介绍了如何在MySQL中利用SUBSTRING_INDEX函数从固定格式的数据中提取日期,以及当数据格式不固定时如何使用正则表达式REGEXP_SUBSTR函数提取8位数字的日期部分。详细解释了两个函数的工作原理和参数用法,推荐查阅MySQL官方文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL如何从数据中截取所需要的字符串

背景

有这样的一个场景,我想从我的表里面进行数据截取,我的数据内容大致如下:
张三-建外SOHO-2-16 POA 20210518.pdf
我想获取数据中的:20210518这一日期部分,需要如何实现?

解决过程

这种情况可以使用MySQL的SUBSTRING_INDEX函数来实现:

SELECT 
SUBSTRING_INDEX(SUBSTRING_INDEX(column_name, ' ', -1), '.', 1) AS extracted_date
FROM your_table;
  1. 使用 SUBSTRING_INDEX(column_name, ’ ', -1) 代表从右向左截取列值,以空格为分隔符,返回最后一个部分,即 “20210518.pdf”。
  2. 然后,再次使用 SUBSTRING_INDEX(…, ‘.’, 1) 代表从左向右截取这个部分,以点号作为分隔符,返回日期部分,即"20210518"。

如果我表中的数据有可能是:Man 101, Woman C4, Gender 1, The Barracks,Zhang san,Receipt20220727(1).pdf 这种,那么通过上边的函数就不能实现了。因为数据样本中日期的位置和格式不固定,所以就可以考虑使用正则表达式来提取日期。

SELECT 
  REGEXP_SUBSTR(column_name, '[0-9]{8}') AS extracted_date
FROM your_table;

这个查询使用了正则表达式 [0-9]{8},它匹配包含8个数字字符(即日期部分)的子字符串。REGEXP_SUBSTR 函数将匹配的子字符串提取出来作为 extracted_date。

另外附上SUBSTRING_INDEX函数的简要说明,详情请参考官方文档:

SUBSTRING_INDEX(str,delim,count)
参数所代表的含义解释如下:

返回从字符串 str 的第 count 个出现的分隔符-即 delim 之后的字符串部分。
如果 count 是正数,则返回从 str 边开始计数的第 count 个 分隔符-delim(不包含分隔符delim)边的字符串。
如果 count 是负数,则返回从 str 边开始计数的第 (count 的绝对值) 个分隔符-delim(不包含分隔符delim)边的字符串。

总结

通过SUBSTRING_INDEX函数和REGEXP_SUBSTR函数可以实现以上需求,具体可参考MySQL官方文档

MySQL 中,字符串截取操作可以通过多个内置函数实现,常用的包括 `SUBSTRING()`、`LEFT()` 和 `RIGHT()`。这些函数可以根据需求灵活地提取字符串的一部分。 ### 使用 `SUBSTRING()` 函数 `SUBSTRING()` 是最常用的字符串截取函数之一,支持从指定位置开始截取一定长度的字符。其基本语法如下: ```sql SUBSTRING(str, start, length) ``` - `str`:需要截取的原始字符串。 - `start`:截取的起始位置(从 1 开始计数)。 - `length`:需要截取的字符数。 例如,从字符串 `'Hello World'` 的第 2 个字符开始截取 5 个字符: ```sql SELECT SUBSTRING('Hello World', 2, 5); -- 输出 'ello ' ``` 如果省略 `length` 参数,则会从 `start` 位置一直截取字符串末尾: ```sql SELECT SUBSTRING('Hello World', 7); -- 输出 'World' ``` ### 使用 `LEFT()` 函数 `LEFT()` 函数用于从字符串的左侧开始截取指定数量的字符。其基本语法如下: ```sql LEFT(str, length) ``` - `str`:需要截取的原始字符串。 - `length`:需要截取的字符数。 例如,从字符串 `'Hello World'` 的左侧截取前 5 个字符: ```sql SELECT LEFT('Hello World', 5); -- 输出 'Hello' ``` ### 使用 `RIGHT()` 函数 `RIGHT()` 函数与 `LEFT()` 类似,但它是从字符串的右侧开始截取指定数量的字符。其基本语法如下: ```sql RIGHT(str, length) ``` - `str`:需要截取的原始字符串。 - `length`:需要截取的字符数。 例如,从字符串 `'Hello World'` 的右侧截取后 5 个字符: ```sql SELECT RIGHT('Hello World', 5); -- 输出 'World' ``` ### 对比 Java 字符串截取规则 Java 中的字符串截取方法 `substring()` 与 MySQL字符串截取函数有所不同: - `substring(int beginIndex)`:从指定索引开始截取字符串末尾。 - `substring(int beginIndex, int endIndex)`:从 `beginIndex` 开始截取到 `endIndex` 前一个字符,即不包含 `endIndex` 处的字符[^1]。 例如: ```java String str = "Hello World"; System.out.println(str.substring(2)); // 输出 "llo World" System.out.println(str.substring(2, 5)); // 输出 "llo" ``` ### 总结 MySQL 提供了多种字符串截取函数,能够满足不同的截取需求。通过 `SUBSTRING()` 可以灵活地从任意位置截取指定长度的字符,而 `LEFT()` 和 `RIGHT()` 则提供了更简洁的方式分别从字符串的左右两侧截取字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值