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

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,mysql,内置函数)