【发布时间】:2021-01-22 04:16:14
【问题描述】:
我正在处理一些要求,我需要根据某些特定条件显示一些数据。
以下是我在这里给出的值作为示例。
条件类似于如果列的前 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 ... ;
【问题讨论】:
-
请添加一些无法通过测试的真实样本数据。找不到匹配项时应该返回什么? NULL 还是原始字符串?
标签: sql oracle substring regexp-substr