You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中如何按多次出现的字符的最后一次出现位置拆分字符串

SQL 按最后一次出现的-拆分列解决方案

核心思路

要实现按最后一次出现的目标字符拆分,只需两步:

  1. 定位目标字符-在字符串中最后一次出现的位置
  2. 基于该位置分别截取前后两段内容作为拆分后的两列

不同数据库实现方案

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 16:06:05