如何通过SQL查询去除冒号分隔符,筛选状态为Success的记录
没问题,我来帮你搞定这个查询需求!下面根据不同数据库类型,给你对应的解决方案:
针对需求的查询实现
首先假设你的表名为your_table,存储目标内容的字段名为target_column(你可以根据实际情况替换这两个名称)。我们需要从中筛选出状态为Success的记录,并提取冒号:后的编码(如rp033、ts088)。
1. MySQL/MariaDB 版本
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(target_column, ':', -1), ' ', 1) AS display_name_code FROM your_table WHERE target_column LIKE '%Success%' AND target_column LIKE 'Joining :%';
- 逻辑拆解:
SUBSTRING_INDEX(target_column, ':', -1):先截取冒号之后的全部内容- 再用
SUBSTRING_INDEX(..., ' ', 1):截取上述结果中第一个空格前的部分,就是我们要的编码 WHERE条件确保只匹配包含Success且格式为Joining :xxx的记录
2. PostgreSQL 版本
SELECT SPLIT_PART(SPLIT_PART(target_column, ':', 2), ' ', 1) AS display_name_code FROM your_table WHERE target_column LIKE '%Success%' AND target_column LIKE 'Joining :%';
- 逻辑拆解:
SPLIT_PART(target_column, ':', 2):按冒号分割内容,取第二部分(冒号后的内容)SPLIT_PART(..., ' ', 1):再按空格分割,取第一部分得到目标编码
3. SQL Server 版本
SELECT LEFT( SUBSTRING(target_column, CHARINDEX(':', target_column) + 1, LEN(target_column)), CHARINDEX(' ', SUBSTRING(target_column, CHARINDEX(':', target_column) + 1, LEN(target_column))) - 1 ) AS display_name_code FROM your_table WHERE target_column LIKE '%Success%' AND target_column LIKE 'Joining :%';
- 逻辑拆解:
CHARINDEX(':', target_column):定位冒号的位置,加1后截取冒号后的所有内容LEFT(..., CHARINDEX(' ', ...)-1):截取到第一个空格前的部分,得到目标编码
特殊情况:字段包含多个Joining条目
如果你的target_column字段里同时存在多个Joining :xxx Status格式的内容(比如用户给出的示例字符串:display_Name Status Joining :st099 Error Joining :rp033 Success Joining :ts088 Success),可以用以下MySQL语句拆分后筛选:
WITH split_rows AS ( SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(target_column, 'Joining :', n), ' ', 2) AS entry FROM your_table JOIN (SELECT 1 AS n UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) AS numbers ON CHAR_LENGTH(target_column) - CHAR_LENGTH(REPLACE(target_column, 'Joining :', '')) >= (n-1)*CHAR_LENGTH('Joining :') ) SELECT SUBSTRING_INDEX(entry, ' ', 1) AS display_name_code FROM split_rows WHERE entry LIKE '%Success';
- 逻辑拆解:先通过数字表拆分出每个独立的
Joining :xxx Status条目,再筛选出状态为Success的条目,最后提取编码。
内容的提问来源于stack exchange,提问作者Sambita
相关产品推荐
相关产品推荐

