【问题标题】:SSIS Variable Expression TrimSSIS 变量表达式修剪
【发布时间】:2015-10-15 13:13:07
【问题描述】:

我将这个字符串传递到一个名为 token 的变量中。

{"reportStatusToken":"NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA=="}

但我一直在尝试使用 SSIS 中的表达式生成器来修剪该字符串以仅包含令牌(请参阅下一个块以获取最终结果)。但我无法让它正确出来。也许我使用了错误的字符串函数。我用过修剪和替换。两者都无法正常工作。

NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA==

之后将其保存回变量,以便我可以使用此令牌在其他包上调用它。这是包级范围,数据类型字符串。任何帮助都会有所帮助。

【问题讨论】:

    标签: ssis expression trim


    【解决方案1】:

    在这种情况下,我发现反转字符串会更容易。

    {"reportStatusToken":"NjVmjYWIwODI0MTVhOzMyNzQ7MTQ0NDg0MjQxMTYxNA=="}
             1         2         3         4         5         6         7
    1234567890123456789012345678901234567890123456789012345678901234567890
    
    }"==ANxYTMxQjM0gDN0QTM7QzNyMzOhVTM0IDOwIWYjmVjN":"nekoTsutatStroper"{
    

    如果字符串反转,值为 1 的 FINDSTRING 将找到第一个(最后一个)引号 {position 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 项目并选择添加新的 biml 文件。双击 BimlScript.biml 并将内容替换为以下内容。完成后,右键单击并选择生成新的 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多