2010-05-19 108 views
8

我有一个数据流的SSIS包,它需要一个ADO.NET数据源(只是一个小表),执行一个select *查询,并将查询结果输出到一个平面文件(我也试过只是拉整个表,而不是使用SQL选择)。如何让SSIS数据流将“0.00”放入平面文件?

问题是数据源拉的是一个Money数据类型的列,如果该值不为零,它会进入文本平面文件就好(如'123.45'),但当值为零,它在目标平面文件中显示为'.00'。我需要知道如何获得领先的零回到平面文件。

我已经尝试过各种数据类型的输出(在平面文件连接管理器),包括货币和字符串,但这似乎没有效果。

我已经尝试了case语句在我的选择,像这样:

CASE WHEN columnValue = 0 THEN 
    '0.00' 
    ELSE 
     columnValue 
    END 

(仍然会导致” .00' )

我试过的变化上,像这样:

CASE WHEN columnValue = 0 THEN 
    convert(decimal(12,2), '0.00') 
ELSE 
    convert(decimal(12,2), columnValue) 
END 

(仍导致” 0.00' )

和:

CASE WHEN columnValue = 0 THEN 
    convert(money, '0.00') 
ELSE 
    convert(money, columnValue) 
END 

这个愚蠢的小问题(在” 0.0000000000000000000'的结果)是吞噬着我。任何人都可以告诉我如何获得零Money数据类型数据库值为一个平面文件为'0.00'?

+0

我很想知道这个问题的原因 - 我不是真的舒适与派生列黑客。 – PeterX 2013-11-25 08:55:16

回答

9

您是否可以使用派生列来更改值的格式?你尝试过吗?

+0

这是一个好主意!让我尝试一下... – theog 2010-05-20 16:27:43

+0

好吧,经过一些摔跤(将数字转换为字符串)后,工作。谢谢Soo! – theog 2010-05-21 20:50:30

8

我有完全相同的问题,soo的答案为我工作。我将数据发送到派生列转换(在数据流转换工具箱中)。我将派生列添加为数据类型Unicode字符串([DT_WSTR])的新列,并使用以下表达式:

Price < 1? “0”+(DT_WSTR,6)价格:(DT_WSTR,6)价格

我希望有帮助!

+0

谢谢user346389 ...包含奇怪的SSIS派生列表达式语法很有帮助。 – theog 2010-05-21 20:51:55

1

由于您要导出到文本文件,只需导出预先格式化的数据。

你可以在查询中做到这一点,或创建派生列,无论你更舒服。

我选择使列15个字符宽。如果你导入到一个期望数字的系统中,这些零应该被忽略...所以为什么不只是标准化字段长度呢?

在SQL一个简单的解决办法如下:

select 
    cast(0.00 as money) as col1 
    ,cast(0.00 as numeric(18,2)) as col2 
    ,right('000000000000000' + cast(0.00 as varchar(10)), 15) as col3 
    go 

col1     col2     col3 
--------------------- -------------------- --------------- 
       .0000     .00 000000000000.00 

只需使用您的列名替换“0.00”,不要忘记添加FROM TABLE_NAME等。

2

我使用的高级编辑从double-precision float列改为decimal,然后设置Scale为2:

enter image description here