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

如何在Hive表中用MySQL语法按最后一个横杠拆分单列?

Hive表按最后一个横杠拆分列的解决方案

需求说明

需要将Hive表中包含多个横杠(-)的name列,从最后一个横杠位置拆分出new_name列,同时保留原表其他字段。

原表数据

nameagegender
a-b-c-d_b23M
d-e-f-g_e44F

期望输出

namenew_nameagegender
a-b-c-d_bd_b23M
d-e-f-g_eg_e44F

解决方案

以下提供两种可行的SQL实现方式,可根据实际场景选择:

方法1:reverse+instr+substring组合(性能更优)

适合数据量较大的场景,通过反转字符串精准定位最后一个横杠:

SELECT 
    name,
    substring(name, instr(reverse(name), '-') + 1) AS new_name,
    age,
    gender
FROM your_table;

逻辑说明:

  1. reverse(name):将name字符串反转,例如a-b-c-d_b转为b_d-c-b-a
  2. instr(reverse(name), '-'):找到反转后第一个-的位置,对应原字符串最后一个-的位置
  3. substring(..., +1):从原字符串中最后一个-的下一位开始截取,得到目标内容

方法2:split函数+数组索引(可读性更强)

代码逻辑直观,适合快速实现:

SELECT 
    name,
    split(name, '-')[size(split(name, '-')) - 1] AS new_name,
    age,
    gender
FROM your_table;

逻辑说明:

  1. split(name, '-'):将name按-分割为数组,例如a-b-c-d_b分割为["a","b","c","d_b"]
  2. size(split(...)) - 1:获取数组最后一个元素的索引
  3. 通过索引直接提取数组最后一个元素,即最后一个-后的内容

特殊场景兼容

如果表中存在name不含横杠的记录,可增加条件判断避免报错:

-- 以方法2为例,兼容无横杠的情况
SELECT 
    name,
    CASE 
        WHEN name LIKE '%-%' THEN split(name, '-')[size(split(name, '-')) - 1]
        ELSE name 
    END AS new_name,
    age,
    gender
FROM your_table;

内容的提问来源于stack exchange,提问作者Sai Sasidhar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:52:51