【发布时间】:2021-01-23 00:21:47
【问题描述】:
请给我一条日志消息,其中包含一个带有难以理解的模糊模式的序列,如下所示
|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 ', ''), ':', '')
【问题讨论】:
-
您最好在应用程序级别解决这个问题。您可以将逻辑封装在
LogMsgParser类或其他东西中。如果没有,请声明一个 SQL 函数来处理解析。顺便说一句,那个日志编写器非常可怕。它不能记录结构化消息吗?
标签: sql string netezza regexp-replace