我有一个看起来像
的字符串" V" :{" cns":" AQRV3Z"," elapsed-ms":" 1"," key-hash" :" 377515780""密钥大小-b":" 116""加载时-MS":" 250& #34;"下限-MS":" 20""结果":"完成""值 - 大小-b":" 3124"}
我想分开" load-time-ms"和"结果"在col1-load time和col2- results两个新列中,这些列将填充相应的值。
我有点陷入子串fucntion。 任何帮助将不胜感激。
谢谢!
答案 0 :(得分:2)
第一个解决方案: SOURCE sql命令中的TSQL。 我使用临时表,请相应更改表名。经过测试,在SSIS中完美运行。 :)
--create table structure
create table #test (strg varchar(1000))
go
--insert into sample data
insert #test values ('"v" : {"cns":"AQRV3Z","elapsed-ms":"1","key-hash":"377515780","key-size-b":"116","load-time-ms":"250","lower-bound-ms":"20","outcome":"done","value-size-b":"3124"}')
--below is solution for the data source
select substring( strg,
charindex('"load-time-ms"',strg)+len('"load-time-ms"')+2,
charindex( '"',
substring( strg,
charindex('"load-time-ms"',strg)+len('"load-time-ms"')+2,
len(strg)))-1) as [col1-load time],
substring( strg,
charindex('"outcome"',strg)+len('"outcome"')+2,
charindex( '"',
substring( strg,
charindex('"outcome"',strg)+len('"outcome"')+2,
len(strg)))-1) as [col2-outcome]
from #test
<强>结果:强>
在SSMS中:
在SSIS中:
第二个解决方案: SSIS中的派生列经过测试,效果很好。 :)
COL1-加载时
SUBSTRING(strg,FINDSTRING(strg,"\"load-time-ms\"",1) + LEN("\"load-time-ms\"") + 2,FINDSTRING(SUBSTRING(strg,FINDSTRING(strg,"\"load-time-ms\"",1) + LEN("\"load-time-ms\"") + 2,LEN(strg)),"\"",1) - 1)
COL2-结果
SUBSTRING(strg,FINDSTRING(strg,"\"outcome\"",1) + LEN("\"outcome\"") + 2,FINDSTRING(SUBSTRING(strg,FINDSTRING(strg,"\"outcome\"",1) + LEN("\"outcome\"") + 2,LEN(strg)),"\"",1) - 1)