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
我正在处理一些要求,我需要根据某些特定条件显示一些数据。
以下是我在这里给出的示例值。
条件就像如果列的前 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