SSIS派生列尾随零

时间:2013-05-09 13:05:39

标签: ssis

我遇到了Derived列的问题。基本上我有一个包含分隔数据的平面文件源。

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

无论如何,数据保存如下:00030.200,0123.410,0002231.210

我需要将这些字符串转换为货币DT_CY。 我已经尝试使用所有不同的数值类型直接强制转换,但它们都失败了(不确定导致它的前导或尾随零)

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

任何帮助?

的Tx

2 个答案:

答案 0 :(得分:5)

你可以这样做,使用派生列:

Replace(Ltrim(Replace(dataToConvert, "0", " ")), " ", "0")

基本上,您将零转换为空格以利用Ltrim函数。

我创建了这个解决方案here

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

基本上,0040.300的转换将以这种方式运行:

  • 内部替换:| | | 4 | |。| 3 | | | ('0'成为空间)
  • Ltrim:| 4 | |。| 3 | | | (左侧空间被修剪)
  • outer替换:| 4 | 0 |。| 3 | 0 | 0 | (空格变为'0')

所以我们最终得到40.300。

答案 1 :(得分:2)

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

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);
        }
    }        
}