You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL字符串截取求助:如何提取指定目标子串?

嘿,我来帮你搞定这个字符串提取的问题!看你给的几个例子,目标是从那些带PAYPAL的字符串里提取出VAGGRAWA或者VAGGRAWA8这类片段对吧?我给你准备了几种实用的SQL实现方案,你可以根据自己用的数据库来选~

针对不同SQL数据库的实现方案

通用正则表达式方案(推荐,适用于MySQL 8+/SQL Server 2017+/PostgreSQL等支持正则的数据库)

这个方案最灵活,不管PAYPAL后面是*还是空格,都能准确提取目标片段:

SELECT 
  REGEXP_SUBSTR(your_column, 'PAYPAL[ *]([^ ]+)', 1, 1, NULL, 1) AS extracted_value
FROM your_table;

正则说明

  • PAYPAL[ *]:匹配开头的PAYPAL,以及后面跟着的空格或者星号
  • ([^ ]+):捕获后面所有非空格的字符(也就是你要的VAGGRAWA/VAGGRAWA8)
  • 最后一个参数1表示取第一个捕获组的内容,直接得到目标字符串

测试一下你的例子:

  • 输入PAYPAL *VAGGRAWA 4029357733 → 输出VAGGRAWA
  • 输入PAYPAL *VAGGRAWA8 4029357733 → 输出VAGGRAWA8
  • 输入PAYPAL VAGGRAWA8 4029357733 → 输出VAGGRAWA8

MySQL/MariaDB 兼容方案(适合低版本不支持正则的情况)

如果你的MySQL版本比较旧,用字符串替换+截取的方式:

SELECT 
  SUBSTRING_INDEX(
    SUBSTRING_INDEX(REPLACE(your_column, '*', ' '), ' ', -2),
    ' ', 1
  ) AS extracted_value
FROM your_table;

逻辑说明

  1. REPLACE(your_column, '*', ' '):把所有星号换成空格,统一分隔符
  2. SUBSTRING_INDEX(..., ' ', -2):取字符串最后两个用空格分隔的部分(也就是目标字符串+末尾数字)
  3. SUBSTRING_INDEX(..., ' ', 1):从这部分里取第一个空格前的内容,就是目标字符串

SQL Server 兼容方案

用字符串截取函数处理:

SELECT 
  SUBSTRING(
    REPLACE(your_column, '*', ' '),
    CHARINDEX(' ', REPLACE(your_column, '*', ' ')) + 1,
    CHARINDEX(' ', REPLACE(your_column, '*', ' '), CHARINDEX(' ', REPLACE(your_column, '*', ' ')) + 1) - CHARINDEX(' ', REPLACE(your_column, '*', ' ')) - 1
  ) AS extracted_value
FROM your_table
WHERE your_column LIKE 'PAYPAL%';

逻辑说明

  1. 先把星号换成空格,统一格式
  2. CHARINDEX(' ', ...)找到第一个空格的位置,+1开始截取
  3. 找到第二个空格的位置,计算出目标字符串的长度,完成截取

PostgreSQL 简洁方案

PostgreSQL的split_part函数非常好用:

SELECT 
  split_part(replace(your_column, '*', ' '), ' ', 2) AS extracted_value
FROM your_table;

逻辑说明

  1. 替换星号为空格
  2. split_part(..., ' ', 2):按空格分割字符串,直接取第2个部分就是目标内容

内容的提问来源于stack exchange,提问作者Vinayak Aggrawal

火山引擎 最新活动