【问题标题】:SSIS 2008 R2: ROUND the float columnSSIS 2008 R2:围绕浮动列
【发布时间】:2017-06-12 13:02:39
【问题描述】:

表:

create table float_dt_test
(
    cola float,
    colb float
);

插入:

insert into float_dt_test values(57,999.857894736842);
insert into float_dt_test values(0.225,999.99);

我想使用 SSIS 将给定数据导出到 .txt 文件中。

我想导出第 6 轮的值。

txt 文件中的预期输出:

Cola                    Colb
-------------------------------------------
57                      999.857895
0.225                   999.99

为此我写了以下查询:

SELECT ROUND(Cola,6) as cola,
       ROUND(Colb,6) as colb 
FROM float_dt_test;

但是得到导出文件后的样子:

Cola                    Colb
-------------------------------------------
57                      999.85789499999998
0.22500000000000001     999.99000000000001

【问题讨论】:

    标签: sql sql-server ssis sql-server-2008-r2 etl


    【解决方案1】:

    四舍五入不会改变内部表示。

    四舍五入后转换为小数:

    SELECT CONVERT(DECIMAL(10, 6), ROUND(Cola, 6)) as cola,
           CONVERT(DECIMAL(10, 6), ROUND(Colb, 6)) as colb 
    FROM float_dt_test;
    

    实际上,ROUND() 现在是多余的。保留它不会造成任何伤害,因为它使操作变得明确。

    【讨论】:

      【解决方案2】:

      DataFlow Task 中,您可以使用以下表达式从SSIS 工具箱中添加两个derived columns

      (DT_NUMERIC,10,6)ROUND([Cola],6)
      
      (DT_NUMERIC,10,6)ROUND([Colb],6)
      

      并将两个派生列映射到平面文件目标。

      【讨论】:

        【解决方案3】:

        您可以使用数据转换转换直接在 SSIS 中执行此操作:

        【讨论】:

        • 这不是个好主意。因为他还需要对数据进行四舍五入。
        • 好点,他可能需要在数据转换之前使用派生列转换进行舍入
        猜你喜欢
        • 1970-01-01
        • 2012-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        • 1970-01-01
        相关资源
        最近更新 更多