根据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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...