如何解决根据Oracle中的条件替换字符串
我正在处理一些需求,需要根据某些特定条件显示一些数据。
以下是我在此处提供的值作为示例。
条件类似于如果该列的前4个字符为 NUMERIC ,则它将进一步检查其是否具有空格,否则在4个字符后给出右侧部分。
如果将查找 SPACE ,那么如果 SPACE 的右侧具有任何 DOT ,它将进一步查找,如果是,则给出右侧 DOT 的一部分。
Column1 Column_new
----------- ----------
22 50.IND1 E IND1 E
RYST 22S2E 22S2E
2608.S1 E S1 E
0540BS2 BS2
这是我正在尝试的代码,但由于我在同一case语句中对多个条件感到困惑,因此仍需要进行一些修改
SELECT COLUMN1,CASE
WHEN LENGTH(TRIM(TRANSLATE(SUBSTR(t1.COLUMN1,4),'0123456789',' '))) IS NULL
THEN (
CASE
WHEN instr(t1.COLUMN1,'.')>0
THEN SUBSTR(t1.COLUMN1,instr(t1.COLUMN1,'.')+1,LENGTH(t1.COLUMN1))
ELSE t1.COLUMN1
END)
WHEN instr(t1.COLUMN1,' ')>0
THEN trim(SUBSTR(t1.COLUMN1,' ')+1,LENGTH(t1.COLUMN1)))
-- when instr(t1.COLUMN1,'.')>0
-- then (case when instr(trim(substr(t1.COLUMN1,' '),length(t1.COLUMN1))),'.')>0 then substr(trim(substr(t1.COLUMN1,ELSE t1.COLUMN1
END AS COLUMN_NEW
FROM TABLE t1
WHERE ...
AND ...
AND ... ;
解决方法
通常,您针对这些类型的问题使用正则表达式。以下可能是您要寻找的内容:
SELECT COLUMN1,REGEXP_REPLACE(COLUMN1,'^([0-9 ]{4}|.* )(.*\.)?','') COLUMN_NEW
FROM TABLE t1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。