微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据Oracle中的条件替换字符串

如何解决根据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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?