Oracle中如何根据col1列/后的内容新建对应新列col2?
Oracle实现方案
1. 新增col2字段
首先在对应表中新增存储截取结果的col2字段,字段长度可根据实际业务中截取内容的最大长度自行调整:
ALTER TABLE 替换为你的实际表名 ADD col2 VARCHAR2(100);
2. 批量更新已有数据的col2值
两种常用实现逻辑,按需选择:
- 方案一:
SUBSTR+INSTR组合(性能最优,适合数据量较大的表,默认取第一个/后的内容)
UPDATE 替换为你的实际表名 SET col2 = SUBSTR(col1, INSTR(col1, '/') + 1);
逻辑说明:
INSTR(col1, '/')会返回/字符在col1中首次出现的下标,SUBSTR从该下标+1的位置开始截取到字符串末尾,即可得到/后的全部内容。
- 方案二:
REGEXP_SUBSTR正则实现(兼容性更强,自动取最后一个/后的内容,适配col1存在多个/的场景)
UPDATE 替换为你的实际表名 SET col2 = REGEXP_SUBSTR(col1, '[^/]+$');
逻辑说明:正则规则
[^/]+$会匹配字符串末尾所有不为/的字符,自动过滤掉前面所有带/的前缀内容。
3. 扩展:自动填充新增数据的col2值
如果需要后续新增数据时自动生成col2值,无需手动维护,可以将col2设置为虚拟计算列:
-- 注意如果之前已经新增了普通col2字段,需要先删除再执行以下语句 ALTER TABLE 替换为你的实际表名 ADD col2 GENERATED ALWAYS AS (SUBSTR(col1, INSTR(col1, '/') + 1)) VIRTUAL;
结果验证
执行以下语句即可验证截取结果是否符合预期:
SELECT col1, col2 FROM 替换为你的实际表名;
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

