sql - 我想从单个消息列 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-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。另请注意,这仅在输入字符串具有已定义顺序的参数时才有效。
推荐阅读
- javascript - 函数中的对象
- c++ - 您可以实例化一个类,然后使用 new 为它分配一个不同的类吗(例如 class1 name = new class2)
- python - 如何自动生成变量及其赋值?
- angular - 如何将正文中的两个表分成xml中的两个不同的工作表?
- flutter - 解析 LocalFile 时出错:'E:\android\app\src\main\AndroidManifest.xml' 请确保 android 清单是有效的 XML 文档,然后重试
- crystal-reports - Crystal Reports - 在子报表之间传递变量
- c++ - 程序在 QT opencv 中意外完成
- c# - System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务):HRESULT:0x80640012
- ionic-framework - ionic cordova build android --verbose 被 ember-cli 失败
- angular-reactive-forms - ERROR 错误:没有名称的表单控件的值访问器: