SSIS 变量表达式 Trim
SSIS Variable Expression Trim
我将这个字符串传递给了一个名为 token 的变量。
{"reportStatusToken":"NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA=="}
但我一直在尝试使用 SSIS 中的表达式构建器来 trim 该字符串以仅具有令牌(请参阅下一个块以了解最终结果)。但我无法让它正确出来。也许我使用了错误的字符串函数。我已经使用 Trim 并替换了。两者都无法正常工作。
NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA==
之后将它保存回变量,这样我就可以使用这个标记在其他包上调用它。这是包级范围,数据类型字符串。任何帮助都会有所帮助。
在这种情况下,我发现反转字符串会更容易。
{"reportStatusToken":"NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA=="}
1 2 3 4 5 6 7
1234567890123456789012345678901234567890123456789012345678901234567890
}"==ANxYTMxQjM0gDN0QTM7QzNyMzOhVTM0IDOwIWYjmVjN":"nekoTsutatStroper"{
如果字符串被反转,FINDSTRING
值为 1 将找到第一个(最后一个)引号{位置 2}。然后我们需要使用该位置来帮助我们找到下一个{位置 48}。我创建了两个 Int32 类型的 SSIS 变量并使用以下公式
PositionUltimateQuoteReverse := FINDSTRING(REVERSE(@[User::token]), "\"", 1)
PositionPenultimateQuoteReverse := FINDSTRING(REVERSE(@[User::token]), "\"", @[User::PositionUltimateQuoteReverse])-1
我将使用这两个值来确定两个引号之间的字符数。我在这里减去 2,因为上面的位置包括引号本身,所以从每一端取一个。
tokenLength := @[User::PositionPenultimateQuoteReverse] - @[User::PositionUltimateQuoteReverse] -2
我们最后需要计算的是确定哪里开始切片和切块。我们简单地做数学运算,加一,找到倒数第二个双引号的位置。
tokenStartPosition := LEN(@[User::token]) - @[User::PositionPenultimateQuoteReverse] +1
最后,我们使用所有这些中间计算来找到最终标记
SUBSTRING(@[User::token], @[User::tokenStartPosition], @[User::tokenLength])
比姆
商业智能标记语言 biml 使我们能够将一种 XML 方言翻译成 SSIS 包。只需下载 BIDS Helper 并安装即可。右键单击 SSIS 项目并 select 添加新的 biml 文件。双击 BimlScript.biml 并将内容替换为以下内容。完成后,右键单击并 select 生成新的 SSIS 包。
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="so_33134095">
<Variables>
<Variable DataType="String" Name="token">{"reportStatusToken":"NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA=="}</Variable>
<Variable
DataType="Int32"
Name="PositionUltimateQuoteReverse"
EvaluateAsExpression="true"><![CDATA[FINDSTRING(REVERSE(@[User::token]), "\"", 1) ]]></Variable>
<Variable
DataType="Int32"
Name="PositionPenultimateQuoteReverse"
EvaluateAsExpression="true"><![CDATA[FINDSTRING(REVERSE(@[User::token]), "\"", @[User::PositionUltimateQuoteReverse])-1]]></Variable>
<Variable
DataType="Int32"
Name="tokenLength"
EvaluateAsExpression="true">@[User::PositionPenultimateQuoteReverse] - @[User::PositionUltimateQuoteReverse] -2</Variable>
<Variable
DataType="Int32"
Name="tokenStartPosition"
EvaluateAsExpression="true">LEN(@[User::token]) - @[User::PositionPenultimateQuoteReverse] +1</Variable>
<Variable
DataType="String"
Name="justToken"
EvaluateAsExpression="true">SUBSTRING(@[User::token], @[User::tokenStartPosition], @[User::tokenLength]) </Variable>
</Variables>
</Package>
</Packages>
</Biml>
我将这个字符串传递给了一个名为 token 的变量。
{"reportStatusToken":"NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA=="}
但我一直在尝试使用 SSIS 中的表达式构建器来 trim 该字符串以仅具有令牌(请参阅下一个块以了解最终结果)。但我无法让它正确出来。也许我使用了错误的字符串函数。我已经使用 Trim 并替换了。两者都无法正常工作。
NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA==
之后将它保存回变量,这样我就可以使用这个标记在其他包上调用它。这是包级范围,数据类型字符串。任何帮助都会有所帮助。
在这种情况下,我发现反转字符串会更容易。
{"reportStatusToken":"NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA=="}
1 2 3 4 5 6 7
1234567890123456789012345678901234567890123456789012345678901234567890
}"==ANxYTMxQjM0gDN0QTM7QzNyMzOhVTM0IDOwIWYjmVjN":"nekoTsutatStroper"{
如果字符串被反转,FINDSTRING
值为 1 将找到第一个(最后一个)引号{位置 2}。然后我们需要使用该位置来帮助我们找到下一个{位置 48}。我创建了两个 Int32 类型的 SSIS 变量并使用以下公式
PositionUltimateQuoteReverse := FINDSTRING(REVERSE(@[User::token]), "\"", 1)
PositionPenultimateQuoteReverse := FINDSTRING(REVERSE(@[User::token]), "\"", @[User::PositionUltimateQuoteReverse])-1
我将使用这两个值来确定两个引号之间的字符数。我在这里减去 2,因为上面的位置包括引号本身,所以从每一端取一个。
tokenLength := @[User::PositionPenultimateQuoteReverse] - @[User::PositionUltimateQuoteReverse] -2
我们最后需要计算的是确定哪里开始切片和切块。我们简单地做数学运算,加一,找到倒数第二个双引号的位置。
tokenStartPosition := LEN(@[User::token]) - @[User::PositionPenultimateQuoteReverse] +1
最后,我们使用所有这些中间计算来找到最终标记
SUBSTRING(@[User::token], @[User::tokenStartPosition], @[User::tokenLength])
比姆
商业智能标记语言 biml 使我们能够将一种 XML 方言翻译成 SSIS 包。只需下载 BIDS Helper 并安装即可。右键单击 SSIS 项目并 select 添加新的 biml 文件。双击 BimlScript.biml 并将内容替换为以下内容。完成后,右键单击并 select 生成新的 SSIS 包。
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package Name="so_33134095">
<Variables>
<Variable DataType="String" Name="token">{"reportStatusToken":"NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA=="}</Variable>
<Variable
DataType="Int32"
Name="PositionUltimateQuoteReverse"
EvaluateAsExpression="true"><![CDATA[FINDSTRING(REVERSE(@[User::token]), "\"", 1) ]]></Variable>
<Variable
DataType="Int32"
Name="PositionPenultimateQuoteReverse"
EvaluateAsExpression="true"><![CDATA[FINDSTRING(REVERSE(@[User::token]), "\"", @[User::PositionUltimateQuoteReverse])-1]]></Variable>
<Variable
DataType="Int32"
Name="tokenLength"
EvaluateAsExpression="true">@[User::PositionPenultimateQuoteReverse] - @[User::PositionUltimateQuoteReverse] -2</Variable>
<Variable
DataType="Int32"
Name="tokenStartPosition"
EvaluateAsExpression="true">LEN(@[User::token]) - @[User::PositionPenultimateQuoteReverse] +1</Variable>
<Variable
DataType="String"
Name="justToken"
EvaluateAsExpression="true">SUBSTRING(@[User::token], @[User::tokenStartPosition], @[User::tokenLength]) </Variable>
</Variables>
</Package>
</Packages>
</Biml>