在一行中的字符串中搜索特定错误并创建一个单独的列
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)($|\|)'
()
(^|\|)
- 匹配字符串或管道的开头
($|\|)
- 匹配字符串或管道的结尾
查询:
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
| 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) |
我在 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)($|\|)'
()
(^|\|)
- 匹配字符串或管道的开头
($|\|)
- 匹配字符串或管道的结尾
查询:
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
| 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) |