首页 > 解决方案 > 我想从单个消息列 sql 查询中提取列

问题描述

我有一条日志消息,我必须使用 sql 查询从中提取列,消息如下所示:

“设备=EOHCS-ZA-JIS-FW 严重性=高自=EOHCloudFAZ(FL1KVM0000005594) 触发器=Syslog 关键系统警报日志=”logver=54 itime=1528457940 devid=FG1K5D3I13800425 devname=FWJIS01 vd=95_LHC 日期=2018-06-08 time=13:34:55 logid=0100044546 type=event subtype=system level=information logdesc="属性配置" user="JoshuaK" ui="ha_daemon" action=编辑cfgtid=701760128 cfgpath="system.settings" cfgattr= "gui-allow-unnamed-policy[disable->enable]" msg="Edit system.settings """

有人可以给我一个想法吗

标签: sql

解决方案


我有一个 SQL-Server 解决方案,您可以使用 PATINDEX 并提取日志消息。

下面是从值中提取的代码

declare @input nVarchar(max),@from nVarchar(MAX)
declare @FromStart int,@FromEnd int

set @input='device=EOHCS-ZA-JIS-FW severity=high from=EOHCloudFAZ(FL1KVM0000005594) trigger=Syslog Critical System Alerts log="logver=54 itime=1528457940 devid=FG1K5D3I13800425 devname=FWJIS01 vd=95_LHC date=2018-06-08 time=13:34:55 logid=0100044546 type=event subtype=system level=information logdesc="Attribute configured" user="JoshuaK" ui="ha_daemon" action=Edit cfgtid=701760128 cfgpath="system.settings" cfgattr="gui-allow-unnamed-policy[disable->enable]" msg="Edit system.settings';

SET @FromStart=PATINDEX('%from=%',@input)+5;
SET @FromEnd=PATINDEX('% trigger=%',@input)-@FromStart;
SELECT @from=SUBSTRING(@input,@FromStart,@FromEnd)
SELECT @from

注意:对相应的数据库服务器使用等效的 PATINDEX。另请注意,这仅在输入字符串具有已定义顺序的参数时才有效。


推荐阅读