Oracle中基于条件的字符串替换

String replacement based on condition in Oracle


我正在处理一些要求,我需要根据某些特定条件显示一些数据。
以下是我在这里给出的示例值。
条件就像如果列的前 4 个字符是 NUMERIC 那么它将进一步检查它是否具有 SPACE 否则给出正确的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,0,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,instr(t1.COLUMN1,' ')+1,LENGTH(t1.COLUMN1)))
      --     when instr(t1.COLUMN1,'.')>0
      --        then (case when instr(trim(substr(t1.COLUMN1,instr(t1.COLUMN1,' '),length(t1.COLUMN1))),'.')>0 then substr(trim(substr(t1.COLUMN1,instr(t1.COLUMN1,' '),length(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