从SQL Netezza字符串中提取串行数据
请我需要一个可以从Logmsg中提取序列号的查询,困难的是它没有遵循特定的模式,没有固定的分隔符,序列长度也不总是相同的从SQL Netezza字符串中提取串行数据,sql,string,netezza,Sql,String,Netezza,请我需要一个可以从Logmsg中提取序列号的查询,困难的是它没有遵循特定的模式,没有固定的分隔符,序列长度也不总是相同的 |LogMsg | |------------------------------------------------------------------------------------------| |Cu
|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|
一种方法是
regexp\u replace()
,但是下面的serial
有不同的格式。因此:
select replace(replace(regexp_extract(logmsg, 'serial [^,]+'), 'serial ', ''), ':', '')
这一点可以用中文回答
结合使用
regexp\u extract\u all\u sp
和get\u value\u varchar
以及正确的正则表达式模式如果需要正则表达式,请参见Netezza支持regexp\u extract(),例如regexp\u extract(logmsg,'\d[^,]*')
似乎从字符串中提取int,就像序列以字母开头一样,它将只提取类似于此序列的int:ZTERRTHJ9303771将是9303771是的,对不起。序列号:
中的:
是可选的吗?是的,它不位于每个序列号中。Gordon提供的查询运行良好,请Gordon提供的查询不适用于以下序列示例:Customer Receive CPE室内。序列号:ZTERRT1H9202990@AhmedMohammedAbdelKader . . . 也许你应该用更多的例子问一个新问题。