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

Oracle中提取子串生成新列时如何将#替换为STE?

解决方案

可以通过字符串替换或拼接的方式实现需求,修改后的SQL支持批量处理整个数据集,代码如下:

-- 生成address line 2:将#替换为STE并保留后续编号
CASE 
    WHEN database.table.address LIKE '%#%'
        THEN REPLACE(SUBSTR(database.table.address, INSTR(database.table.address, '#')), '#', 'STE ')
END "address line 2"

-- 生成address line 1:提取#之前的地址部分
CASE 
    WHEN database.table.address LIKE '%#%'
        THEN SUBSTR(database.table.address, 1, INSTR(database.table.address, '#') - 1)
END "address line 1"

关键改动说明

  • address line 2的处理:
    原代码提取出的是#220,这里用REPLACE函数直接将子串中的#替换为STE ,最终得到STE 220。你也可以用更直观的拼接写法(效果完全一致):

    THEN 'STE ' || SUBSTR(database.table.address, INSTR(database.table.address, '#') + 1)
    

    这种方式先提取#之后的编号(如220),再拼接STE 前缀,逻辑更清晰。

  • address line 1的优化:
    将原代码中的SUBSTR(..., 0, ...)改为SUBSTR(..., 1, ...),Oracle的SUBSTR函数起始位置为0时会自动视为1,使用1更符合函数规范,避免歧义。

批量处理说明

上述逻辑会自动遍历数据集所有address字段,只要字段包含#就会执行拆分和替换操作,无需针对单行数据单独处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:10:04