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

Search for a specific error in a string in a row and create a separate column

我在 table 的一列中有以下文字:

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'

谢谢, 凯文

您可以通过捕获第二个匹配组中的错误模式来使用 '(^|\|)(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) |