แยกอนุกรมจากสตริง SQL Netezza

Oct 07 2020

ได้โปรดฉันต้องการคำค้นหาที่สามารถดึง Serial # ออกจาก 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ร่วมกับรูปแบบนิพจน์ทั่วไปที่ถูกต้อง