sql - 有没有办法在输出列中的特殊字符之间使用子字符串在选择查询中获取输出
问题描述
我正在使用选择查询并从表中输出 2 列。一列包含由特殊字符 ":" 分隔的字符串中的数据。我需要在特殊字符的第一个实例和特殊字符的第二个实例之间输出带有字符串输出的列中的数据
表 -ACC_TABLE
使用的命令:
select SC_NAME, SUBSTR(PROP,1,30)
from ACC_TABLE where PROP like '%REC%' and like PROP like '%NEC%'
前 2 行的输出——
SC_NAME PROP
00000 {"sender":"","message":"@{source.message
1000NN {"sender":"REC","message":"Dear Custo
2040NN {"sender":"NEC@notify.com","message":"Dear Custo
我需要从列名 PROP 中获取不同且唯一的发件人,即在第一个“发件人”:“和”之间,这些值也不是特定的长度,因此我无法使用具有固定宽度的标准 substr。
select SC_NAME, SUBSTR(PROP,1,30)
from ACC_TABLE where PROP like '%REC%' and like PROP like '%NEC%'
预计会从列名 PROP 中获得不同且唯一的发件人,即在第一个“发件人”:“和”之间,这些值也不是特定的长度,因此我无法使用具有固定宽度的标准 substr。
解决方案
使用以下逻辑仅获取发件人姓名/ID。
只需添加另一列并使用此逻辑来转换实际列并使用 distinct 来获取唯一的发件人
选择
reverse( substring( reverse(substring(replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex('%message%','{"sender":"REC" ,"message":"Dear Custo')-1),'sender',''), patindex('%[A-Za-Z0-9]%',replace(substring('{"sender":"REC ","message":"Dear Custo',1,patindex('%message%','{"sender":"REC","message":"Dear Custo')-1),'sender','' )), len(replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex('%message%','{"sender":"REC","message ":"Dear Custo')-1),'sender','')))), patindex('%[A-Za-Z0-9]%',reverse(substring(replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex('%message%','{"sender":"REC","message" :"Dear Custo')-1),'sender',''), patindex('%[A-Za-Z0-9]%',replace(substring('{"sender":"REC","message ":"Dear Custo',1,patindex('%message%','{"sender":"REC","message":"Dear Custo')-1),'sender','')), len (replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex('%message%','{"sender":"REC","message":"Dear Custo')-1),'sender',''))))), len(reverse(substring(replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex('%message%','{"sender":"REC","message":"Dear Custo')-1),'发件人',''), patindex('%[A-Za-Z0-9]%',replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex( '%message%','{"sender":"REC","message":"Dear Custo')-1),'sender','')), len(replace(substring('{"sender": "REC","message":"Dear Custo',1,patindex('%message%','{"sender":"REC","message":"Dear Custo')-1),'sender', '')))))))%message%','{"sender":"REC","message":"Dear Custo')-1),'sender',''), patindex('%[A-Za-Z0-9]% ',replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex('%message%','{"sender":"REC","message":" Dear Custo')-1),'sender','')), len(replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex('%message% ','{"sender":"REC","message":"Dear Custo')-1),'sender','')))))))%message%','{"sender":"REC","message":"Dear Custo')-1),'sender',''), patindex('%[A-Za-Z0-9]% ',replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex('%message%','{"sender":"REC","message":" Dear Custo')-1),'sender','')), len(replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex('%message% ','{"sender":"REC","message":"Dear Custo')-1),'sender','')))))))sender":"REC","message":"Dear Custo',1,patindex('%message%','{"sender":"REC","message":"Dear Custo')-1),' sender','')), len(replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex('%message%','{"sender":" REC","message":"Dear Custo')-1),'sender','')))))))sender":"REC","message":"Dear Custo',1,patindex('%message%','{"sender":"REC","message":"Dear Custo')-1),' sender','')), len(replace(substring('{"sender":"REC","message":"Dear Custo',1,patindex('%message%','{"sender":" REC","message":"Dear Custo')-1),'sender','')))))))REC","message":"Dear Custo')-1),'sender','')))))))REC","message":"Dear Custo')-1),'sender','')))))))
推荐阅读
- jquery - 如何根据数据自定义jQuery数据表中th或td的宽度?
- asp.net-core-2.0 - 如何从 .net core 2.2 中的 log4net 配置文件中获取 appender
- python - 如何使用python在插入语句中转义单引号
- sql - 如果数据不存在,则无法显示 0 值
- openlayers - map.on('singleclick',function(evt){}); 调用单击时正在注册多次
- amazon-web-services - 将文件夹的所有内容(递归)从一个 s3 存储桶复制到另一个
- mysql - 使用 mysql 动态查询返回已处理的行数
- python - 为什么不能迭代?
- java - 为什么会发生此“IllegalStateException:已添加片段”错误?
- azure - 使用 Azure Devops 将 asp.net 核心 Web 应用程序部署到本地 IIS 的正确方法