Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 - Fatal编程技术网

SSIS派生列的尾随零

SSIS派生列的尾随零,ssis,Ssis,我对派生列有问题。基本上我有一个包含分隔数据的平面文件源 我的一些列是货币,数据以一种奇怪的格式保存(较旧的系统倾向于这样做) 无论如何,数据保存为:00030.2000123.4100002231.210 我需要将这些字符串转换为货币dtu CY。 我尝试过使用所有差分数值类型进行直接强制转换,但都失败了(不确定是前导零还是尾随零导致的) 所以我的问题很简单。我可以在派生列中使用什么表达式来删除前导零和尾随零。请注意,数据的长度并非始终相同,因此无法精确执行左/右子字符串选项 有什么帮助吗 T

我对派生列有问题。基本上我有一个包含分隔数据的平面文件源

我的一些列是货币,数据以一种奇怪的格式保存(较旧的系统倾向于这样做)

无论如何,数据保存为:00030.2000123.4100002231.210

我需要将这些字符串转换为货币dtu CY。 我尝试过使用所有差分数值类型进行直接强制转换,但都失败了(不确定是前导零还是尾随零导致的)

所以我的问题很简单。我可以在派生列中使用什么表达式来删除前导零和尾随零。请注意,数据的长度并非始终相同,因此无法精确执行左/右子字符串选项

有什么帮助吗


Tx

好的,所以我自己找到了答案,通过玩“脚本组件”,并使用以下代码删除传入的所有属性的所有前导空格:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    var rowProperties = Row.GetType().GetProperties();
    foreach (var rowColumn in rowProperties)
    {           

        if (rowColumn.PropertyType == typeof(System.String))
        {          
            var rowValue = rowColumn.GetValue(Row, null);    
            rowColumn.SetValue(Row, rowValue.ToString().TrimStart('0'), null);
        }
    }        
} 

您可以通过使用派生列这样做:

Replace(Ltrim(Replace(dataToConvert, "0", " ")), " ", "0")
基本上,您可以将零转换为空格,以利用Ltrim函数的优点

我创建了这个解决方案

下面是一个如何进行的示例: (假设我们要转换0040.300。 为此,我们可以将数字显示为:| 0 | 0 | 4 | 0 |。| 3 | 0 | 0 |以查看替换语句如何影响我们的数据)

基本上,0040.300的转换方式如下:

  • 内部替换:| | | 4 | |.| 3 | | |('0'变为空格)
  • Ltrim:| 4 | | |.| 3 | | | |(左空格已修剪)
  • 外部替换:| 4 | 0 |.| 3 | 0 | 0 |(空格变为“0”)

所以我们用40.300。

这不是要替换字符串中间的零点吗?示例012301.11这不会成为1231.11。不确定,只是问问。好吧,这很有道理。我将您的答案标记为“答案”,因为即使我下面的答案也同样有效,但为这样简单的事情编写代码并不是SSIS的最佳实践。Tx以获取您的帮助。它还将从0替换0。很抱歉重新浮动此值。