我遇到了Derived列的问题。基本上我有一个包含分隔数据的平面文件源。
我的一些列是货币,数据以奇怪的格式保存(旧系统倾向于这样做)。
无论如何,数据保存如下:00030.200,0123.410,0002231.210
我需要将这些字符串转换为货币DT_CY。 我已经尝试使用所有不同的数值类型直接强制转换,但它们都失败了(不确定导致它的前导或尾随零)
所以我的问题很简单。我可以在派生列中使用什么表达式来删除前导零和尾随零。请注意,数据始终不是相同的长度,因此不能完全执行左/右子字符串选项。
任何帮助?
的Tx
答案 0 :(得分:5)
你可以这样做,使用派生列:
Replace(Ltrim(Replace(dataToConvert, "0", " ")), " ", "0")
基本上,您将零转换为空格以利用Ltrim函数。
我创建了这个解决方案here。
以下是如何进行的示例: (假设我们要转换0040.300。 为此,我们可以将数字显示为:| 0 | 0 | 4 | 0 |。| 3 | 0 | 0 |看看Replace语句如何影响我们的数据)
基本上,0040.300的转换将以这种方式运行:
所以我们最终得到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);
}
}
}