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>