SQL中如何按多次出现的字符的最后一次出现位置拆分字符串
SQL 按最后一次出现的
-拆分列解决方案 核心思路
要实现按最后一次出现的目标字符拆分,只需两步:
- 定位目标字符
-在字符串中最后一次出现的位置 - 基于该位置分别截取前后两段内容作为拆分后的两列
不同数据库实现方案
MySQL 实现
使用INSTR结合REVERSE定位最后一个-的位置,再用SUBSTRING截取:
SELECT -- 拆分后列1:截取从开头到最后一个'-'之前的内容 SUBSTRING(your_column, 1, LENGTH(your_column) - INSTR(REVERSE(your_column), '-')) AS col1, -- 拆分后列2:截取从最后一个'-'开始到末尾的内容 SUBSTRING(your_column, LENGTH(your_column) - INSTR(REVERSE(your_column), '-') + 1) AS col2 FROM your_table;
如果需要处理不含-的行避免报错,可以增加判断逻辑:
SELECT CASE WHEN INSTR(your_column, '-') = 0 THEN your_column ELSE SUBSTRING(your_column, 1, LENGTH(your_column) - INSTR(REVERSE(your_column), '-')) END AS col1, CASE WHEN INSTR(your_column, '-') = 0 THEN '' ELSE SUBSTRING(your_column, LENGTH(your_column) - INSTR(REVERSE(your_column), '-') + 1) END AS col2 FROM your_table;
PostgreSQL 实现
使用STRPOS结合REVERSE实现:
SELECT LEFT(your_column, LENGTH(your_column) - STRPOS(REVERSE(your_column), '-')) AS col1, RIGHT(your_column, STRPOS(REVERSE(your_column), '-')) AS col2 FROM your_table;
SQL Server 实现
使用CHARINDEX定位最后一个-的位置:
SELECT LEFT(your_column, LEN(your_column) - CHARINDEX('-', REVERSE(your_column))) AS col1, RIGHT(your_column, CHARINDEX('-', REVERSE(your_column))) AS col2 FROM your_table;
Oracle 实现
直接使用INSTR的定位参数直接查找最后一次出现的位置,无需反转字符串:
SELECT SUBSTR(your_column, 1, INSTR(your_column, '-', -1) - 1) AS col1, SUBSTR(your_column, INSTR(your_column, '-', -1)) AS col2 FROM your_table;
效果验证
拿示例数据400000007_MOD-HUD_1-1.jpg测试,拆分结果完全符合预期:
- col1:
400000007_MOD-HUD_1 - col2:
-1.jpg
内容的提问来源于stack exchange,提问作者Eric G
相关产品推荐
相关产品推荐

