我在表格的一栏中有以下文字:
ERR_COLUMN
Error1|Error2|Error2|Error5|Error6
示例错误:
NULL START_TIME|NULL REPAIR_SYMPTOM|NULL PART_ID|NULL PARTS_DC_LOC|NULL
PART_REPLACE_REASON|INVALID REPAIR SYMPTOM|INVALID PARTS REPLACEMENT REASON
我的要求是在字符串中搜索错误,并将其分成单独的列。例如:
ERR_COLUMN Error1 Error2 Error3 Error4 Error5
Error1|Error2|Error2|Error5|Error6 Error1 Error2 Error3 Error4 Error5
另外,不确定是否可行:在某些情况下会出现不同的错误,null a,null b,null c..etc。我想查找所有以NULL开头的错误,并将它们解码为“ Error2”。除了上述内容。
Ex: NULL A, NULL B, NULL C --> 'ERROR2'
谢谢, 凯文(Kavin)
答案 0 :(得分:0)
您可以通过捕获第二个匹配组'(^|\|)(Errorpattern)($|\|)'
中的错误模式来使用()
(^|\|)
-匹配字符串或管道的开头
($|\|)
-匹配字符串或管道的结尾
查询:
SELECT
ERR_COLUMN,
regexp_substr(ERR_COLUMN,'(^|\|)(Error1)($|\|)',1,1,NULL,2) as "Error1"
,regexp_substr(ERR_COLUMN,'(^|\|)(Error2)($|\|)',1,1,NULL,2) as "Error2"
,regexp_substr(ERR_COLUMN,'(^|\|)(Error3)($|\|)',1,1,NULL,2) as "Error3"
,regexp_substr(ERR_COLUMN,'(^|\|)(Error4)($|\|)',1,1,NULL,2) as "Error4"
,regexp_substr(ERR_COLUMN,'(^|\|)(Error5)($|\|)',1,1,NULL,2) as "Error5"
FROM t
Results :
| ERR_COLUMN | Error1 | Error2 | Error3 | Error4 | Error5 |
|------------------------------------|--------|--------|--------|--------|--------|
| Error1|Error2|Error2|Error5|Error6 | Error1 | Error2 | (null) | (null) | Error5 |
| Error3|Error4|Error5| | (null) | (null) | Error3 | Error4 | Error5 |
| Error1|Error2|Error6| | Error1 | Error2 | (null) | (null) | (null) |