Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ssis-将单个字符串拆分为多个列_Ssis_Ssis 2012 - Fatal编程技术网

ssis-将单个字符串拆分为多个列

ssis-将单个字符串拆分为多个列,ssis,ssis-2012,Ssis,Ssis 2012,我有一根绳子,看起来像 “v”:{“cns”:“AQRV3Z”,“已用毫秒”:“1”,“密钥哈希”:“377515780”,“密钥大小-b”:“116”,“加载时间毫秒”:“250”,“下限毫秒”:“20”,“结果”:“完成”,“值大小-b”:“3124”} 我想将“加载时间ms”和“结果”分隔在两个新列中,如col1加载时间和col2-output,这两个列将填充相应的值 我被子串的功能卡住了。 任何帮助都将不胜感激 谢谢 第一个解决方案:源sql命令中的TSQL。 我使用临时表,请相应更改表

我有一根绳子,看起来像

“v”:{“cns”:“AQRV3Z”,“已用毫秒”:“1”,“密钥哈希”:“377515780”,“密钥大小-b”:“116”,“加载时间毫秒”:“250”,“下限毫秒”:“20”,“结果”:“完成”,“值大小-b”:“3124”}

我想将“加载时间ms”和“结果”分隔在两个新列中,如col1加载时间和col2-output,这两个列将填充相应的值

我被子串的功能卡住了。 任何帮助都将不胜感激


谢谢

第一个解决方案:源sql命令中的TSQL。 我使用临时表,请相应更改表名。经过测试,在SSIS中工作完美。:)

结果:

在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)

第一个解决方案:TSQL在源sql命令中。 我使用临时表,请相应更改表名。经过测试,在SSIS中工作完美。:)

结果:

在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)

您是想在ssis派生列中还是在源定义的tsql中执行此操作?答案是关于如何执行此操作的语法非常不同。Matt,我正在尝试使用ssis派生列来执行此操作。您“被子字符串函数卡住”是什么意思?您是想在ssis派生列中执行此操作,还是在源定义中的tsql中执行此操作?答案是关于如何做的非常不同的语法。Matt,我正在尝试使用ssis派生列来做这件事。你说“被子字符串函数卡住”是什么意思?嗨,Henry,谢谢你在T-sql中编写的代码。我希望在ssis派生列中这样做,因为我的目标将是一个平面文件,而不是oledb目标。但是非常感谢!它也适用于FF目的地。我更新了答案,请查看。:)你的目的地与其说是你的来源,不如说是你的目的地。如果您使用的是sql server source@design,那么这个解决方案非常有效,因为您只需将动态列添加到sql select语句中。那么就不需要派生列了。但是如果您的源不是sql,那么您必须使用派生列。所以,如果源代码允许的话,它是一种基于首选项的方法。@guest678我更新了答案并包含了派生列代码。享受。:)嗨,亨利,谢谢你用T-sql编写的代码。我希望在ssis派生列中这样做,因为我的目标将是一个平面文件,而不是oledb目标。但是非常感谢!它也适用于FF目的地。我更新了答案,请查看。:)你的目的地与其说是你的来源,不如说是你的目的地。如果您使用的是sql server source@design,那么这个解决方案非常有效,因为您只需将动态列添加到sql select语句中。那么就不需要派生列了。但是如果您的源不是sql,那么您必须使用派生列。所以,如果源代码允许的话,它是一种基于首选项的方法。@guest678我更新了答案并包含了派生列代码。享受。:)