문자열 SQL Netezza에서 직렬 추출
Oct 07 2020
Logmsg에서 일련 번호를 추출 할 수있는 쿼리가 필요합니다. 어려운 점은 특정 패턴을 따르지 않고 고정 구분 기호가 없으며 일련 길이가 항상 동일하지 않다는 것입니다.
|LogMsg |
|------------------------------------------------------------------------------------------|
|Customer Receive CPE Indoor. serial 21530369847SKA011094, user:ahmed.o.haraz |
|Customer Receive CPE Indoor as change. serial :21530369847SK9078291, user:Abdullah.M160275|
|Customer Receive CPE Indoor as change. serial :T5D7S18802909825, user:ahmed.o.haraz |
|Customer Receive CPE Indoor as change. serial :T5D7S18802909830, user:ahmed.o.haraz |
|Customer Receive CPE Indoor. serial ZTERRTHJ9303771, user:Mohamed.E176246 |
|Customer Returned CPE. serial :21530369847SKA011094, user:ahmed.o.haraz |
결과는 다음과 같습니다.
|Serial |
|--------------------|
|21530369847SKA011094|
|21530369847SK9078291|
|T5D7S18802909825 |
|T5D7S18802909830 |
|ZTERRTHJ9303771 |
|21530369847SKA011094|
답변
1 GordonLinoff Oct 07 2020 at 17:59
한 가지 방법은 regexp_replace()있지만 다음과 같은 형식이 다릅니다 serial. 그래서:
select replace(replace(regexp_extract(logmsg, 'serial [^,]+'), 'serial ', ''), ':', '')
1 AniketKulkarni Oct 08 2020 at 09:37
이것은 https://stackoverflow.com/a/64254966/14311638
올바른 정규식 패턴과 함께 regexp_extract_all_sp및 조합 사용get_value_varchar