从字符串中提取遵循模糊模式的序列SQL Netezza

问题描述

请给我一条日志消息,其中包含一个序列,带有如下所示的难以理解的模糊模式

|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. serial:ZTERRT1H9202990                                       |
|Customer Receive CPE Indoor. serial 21530369847SKB333996 .UserName :TEDST.mohamed.badry   |
|Customer Receive CPE Indoor as change. serial :21530373727skc298302,user:Frass.m195577   |
|Customer Receive CPE Indoor. serial 21530369847SKA267112 .UserName :seller.160002         |

我需要从如下所示的字符串中提取序列号

|Serial|
|21530369847SKA011094|
|21530369847SK9078291|
|ZTERRT1H9202990     |
|21530369847SKB333996|
|21530373727skc298302|
|21530369847SKA267112|

我使用regexp_replace()收到了上述查询,但是错过了其中一些

select replace(replace(regexp_extract(logmsg,'serial [^,]+'),'serial ',''),':','')

解决方法

尝试

select get_value_varchar(
        regexp_extract_all_sp(logmsg,'(serial\s*:?)([^,\s]+)'),3) as serial
from serial;

它应该为您提供所需的结果

        SERIAL
----------------------
 21530369847SKA011094
 21530369847SKA267112
 21530369847SKB333996
 21530369847SK9078291
 ZTERRT1H9202990
 21530373727skc298302
(6 rows)