在一行中的字符串中搜索特定错误并创建一个单独的列

时间:2018-08-08 18:40:38

标签: regex oracle substr regexp-substr

我在表格的一栏中有以下文字:

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)

1 个答案:

答案 0 :(得分:0)

您可以通过捕获第二个匹配组'(^|\|)(Errorpattern)($|\|)'中的错误模式来使用()

(^|\|)-匹配字符串或管道的开头 ($|\|)-匹配字符串或管道的结尾

SQL Fiddle

查询

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) |