You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSIS中使用派生列转换将字符串转为指定小数格式?

SSIS派生列转换实现COLB字段保留两位小数格式

问题场景

原始数据文件格式如下:

COLA,COLB,COLC
James,198.87,09
Jack,32.7,78
Philips,0.0,98
Jacob,0,76

需求是通过SSIS派生列转换,将COLB字段处理为固定保留两位小数的格式,预期结果为:198.87、32.70、0.00、0.00。

尝试过的错误方案

使用以下表达式时出现解析错误:

LEN(TRIM([COLB])) == 0 ?" " : (iSNULL( (DT_DECIMAL,18,2) [COLB]) ? " " : (DT_WSTR,10) (DT_DECIMAL,18,2)[COLB])

错误提示:

Error at Data Flow Task [Derived Column [96]]: Cannot parse the expression "LEN(TRIM([COLB])) == 0 ?" " : (iSNULL( (DT_DECIMAL,18,2) [COLB]) ? " " : (DT_WSTR,10) (DT_DECIMAL,18,2)[COLB])". The expression was not valid, or there is an out-of-memory error.

ROUND函数的问题

使用ROUND函数的表达式:

(DT_WSTR,20)(ROUND((DT_R8)[Rate Paid],2))

得到的结果不符合预期,多余的小数位未被截断:

COLA,COLB,COLC
James,198.86666,09
Jack,32.700000,78
Philips,0.0000,98
Jacob,0,76

正确解决方案

方案1:使用STR函数(兼容所有SSIS版本)

STR函数可直接将数值格式化为指定小数位数的字符串,结合TRIM去除前导空格,同时处理空值场景:

ISNULL([COLB]) ? "0.00" : TRIM(STR((DT_DECIMAL,2)[COLB], 10, 2))
  • 先将COLB强制转换为DT_DECIMAL,2类型,确保两位小数精度
  • 用STR格式化为两位小数的字符串,TRIM去掉默认的前导空格
  • 空值时返回"0.00",保证输出格式统一

方案2:使用FORMAT函数(SSIS 2012及以上版本)

FORMAT函数支持灵活的格式字符串,指定"N2"即可生成带两位小数的数值字符串:

ISNULL([COLB]) ? "0.00" : FORMAT([COLB], "N2")
  • "N2"表示数值格式,自动保留两位小数并补零
  • 同样处理空值场景,输出符合预期的格式

错误原因说明

  1. 原表达式中(DT_DECIMAL,18,2)语法错误:SSIS中DT_DECIMAL类型仅需指定小数位数(scale),正确写法为(DT_DECIMAL,2)
  2. iSNULL拼写错误,应为ISNULL
  3. ROUND函数仅对数值进行四舍五入,不会改变其字符串输出的精度,因此仍会显示多余小数位,需通过字符串格式化函数实现固定位数输出

内容的提问来源于stack exchange,提问作者AMDI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:32:05