有这样的一个场景,我想从我的表里面进行数据截取,我的数据内容大致如下:
张三-建外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;
如果我表中的数据有可能是: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。
详细的函数说明和示例请参考MySQL的官方文档:
https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-substr
另外附上SUBSTRING_INDEX函数的简要说明,详情请参考官方文档:
SUBSTRING_INDEX(str,delim,count)
参数所代表的含义解释如下:
返回从字符串 str 的第 count 个出现的分隔符-即 delim 之后的字符串部分。
如果 count 是正数,则返回从 str 左边开始计数的第 count 个 分隔符-delim(不包含分隔符delim)左边的字符串。
如果 count 是负数,则返回从 str 右边开始计数的第 (count 的绝对值) 个分隔符-delim(不包含分隔符delim)右边的字符串。
具体的示例有需要的可以自行去尝试。