注意SSIS中的DT_NUMERIC类型转换为字符类型(比如DT_WSTR)时,会截断小数点前的0
我们知道SSIS中有许多数据类型,如下图所示:

但是DT_NUMERIC这个类型有个陷进要注意,我们来做个实验,随便定义一个String类型的SSIS包变量,然后打开该变量表达式窗口:

在变量表达式窗口中,首先我们将一个小数0.05转换为DT_NUMERIC(DT_NUMERIC, 8, 2)类型,然后再将其转换为DT_WSTR(DT_WSTR, 20)类型,然后点击左下方的Evaluate Expression按钮,然后看看Evaluated Value文本框的结果,如下图所示:
(DT_WSTR, 20) (DT_NUMERIC, 8, 2) 0.05

我们发现小数0.05最后居然输出的字符串是.05整数部分的0消失了。。。
我们再来试试-0.05的计算结果,如下图所示:
(DT_WSTR, 20) (DT_NUMERIC, 8, 2) -0.05

同样-0.05最后输出的字符串是-.05整数部分的0也消失了。。。
这是因为在SSIS中如果将DT_NUMERIC类型直接转换为诸如DT_WSTR这样的字符串类型,会将绝对值小于1的小数(比如0.2,0.3, -0.8等)整数位截取掉。
如果要将DT_NUMERIC转换为DT_WSTR这样的字符串类型,必须要先将DT_NUMERIC转换为DT_DECIMAL,然后再转换为字符串类型DT_WSTR,这样就不会出现本文所述的小数整数截断问题。
例如我们将0.05先转换为DT_NUMERIC(DT_NUMERIC, 8, 2)类型,然后再转换为DT_DECIMAL (DT_DECIMAL, 2)类型,最后转换为DT_WSTR(DT_WSTR, 20)类型,如下图所示:
(DT_WSTR, 20) (DT_DECIMAL, 2) (DT_NUMERIC, 8, 2) 0.05

现在小数0.05就完整的显示出来了。
所以当DT_NUMERIC类型转换为诸如DT_WSTR这样的字符串类型时要当心,必须要将其先转换为DT_DECIMAL类型,再转换为DT_WSTR这样的字符串类型,避免小数点前的0被截断。虽然我也不知道为什么SSIS有这么一个莫名其妙的问题,但是目前来看只有通过先将DT_NUMERIC类型转换为DT_DECIMAL类型才能解决这个问题。尤其是在某些SSIS数据流任务(Data Flow Task)中用到了DT_NUMERIC类型要特别当心,因为数据流的目标有时候会将DT_NUMERIC类型直接转换为DT_WSTR这样的字符串类型,那么你会发现数据流目标输出的文件中,小数点前的0可能全部都没有。。。要在数据流任务中使用派生列(Derived Column)组件或数据类型转换(Data Conversion)组件,先将DT_NUMERIC类型转换为DT_DECIMAL类型,再输出到数据流目标文件,才能保证目标文件中的小数正确显示。
注意SSIS中的DT_NUMERIC类型转换为字符类型(比如DT_WSTR)时,会截断小数点前的0的更多相关文章
- Java进阶(二十三)java中long类型转换为int类型
java中long类型转换为int类型 由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参 ...
- python中是否有单独的字符类型,通过下标的方式表示字符串中的字符
说明: 在python中,没有单独的字符类型,一个字符呢就是一个大小为1的字符串. 并且可以通过下标的方式,表示字符串中的字符. 操作过程: 1.通过[ ]的方式表示字符串中的第几个字符 >&g ...
- Qt中实现将float类型转换为QString类型
在使用Qt Creator编程时,难免会用到将float类型转换为QString类型的时候下面是我所有的方法: 1. 将QString类型转化为float类型,很简单 QString data; fl ...
- python中bytes类型转换为str类型
使用的原因:基于URL解析报文的时候,要使用str类型,但是提供的确实bytes类型,报错: TypeError: must be str, not bytes 所以就把bytes类型转换为str类型 ...
- java中long类型转换为int类型
由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参考: 一.强制类型转换 [java] l ...
- c++ string类型转换为char *类型
string 是c++标准库里面其中一个,封装了对字符串的操作 把string转换为char* 有3中方法: 1.data 如: string str="abc"; char *p ...
- 小问题,小细节要注意(string类型转换为bool类型)
一个表中的推荐字段是bit类型的,添加的时候推荐有两个值,如<asp:RadioButtonList ID="RadioButtonList1" runat="se ...
- Oracle 日期型 将timestamp类型转换为date类型
Oracle将timestamp类型转换为date类型有三种方法 1.使用to_char先转为字符型,在使用to_date再转为日期型 select to_date(to_char(systimest ...
- 深度学习原理与框架-Tensorflow基本操作-mnist数据集的逻辑回归 1.tf.matmul(点乘操作) 2.tf.equal(对应位置是否相等) 3.tf.cast(将布尔类型转换为数值类型) 4.tf.argmax(返回最大值的索引) 5.tf.nn.softmax(计算softmax概率值) 6.tf.train.GradientDescentOptimizer(损失值梯度下降器)
1. tf.matmul(X, w) # 进行点乘操作 参数说明:X,w都表示输入的数据, 2.tf.equal(x, y) # 比较两个数据对应位置的数是否相等,返回值为True,或者False 参 ...
随机推荐
- useradd 命令详解
useradd 作用: 用于Linux中创建的新的系统用户, useradd 可用来建立用户账号, 账号建好之后,再用passwd 设定账号的密码, 可用userdel 删除账号. 使用useradd ...
- 学习Object.assign()
Object.assign()用于将所有可枚举的值从一个或多个源对象复制到目标对象.它将返回目标对象. 语法 Object.assign(target, ...source); var obj = { ...
- 2017双11海量数据下EagleEye的使命和挑战
摘要: EagleEye作为阿里集团老牌的链路跟踪系统,其自身业务虽不在交易链路上,但却监控着全集团的链路状态,特别是在中间件的远程调用上,覆盖了集团绝大部分的场景,在问题排查和定位上发挥着巨大的作用 ...
- package-cleanup
package-cleanup 是一个python开发的命令程序,用来清除本机已安装的.重复的 或孤立的软件包. desktop版的CentOS镜像包含这个工具,而Minimal版的CentOS镜像不 ...
- Tomcat安装和目录简介
要知道动态的网页必须要有服务器的支撑! 1.知名的java web服务器 Tomcat:Apache组织发布,免费开源的,轻量级 JBoss.WebLogic是商用的,价格较高,但相对于开源的更加稳定 ...
- JavaScript学习点滴 call、apply的区别
对于apply和call两者在作用上是相同的,但两者在参数上有区别的. 1.call call 方法 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1 ...
- admin
执行顺序 : Admin 执行admin.py,导入models 第一次进来的时候,先创建admin.site对象(如果下次再有引入,不会重新创建) 拿到对象后执行该对象下的register()方法 ...
- 宇宙探索特工队&scrum
对scrum的一些理解 Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发.Scrum包括了一系列实践和预定义角色的过程骨架.Scrum中的主要角色包括同项目经理类似的Scrum主管角色负责 ...
- DBA 优化法则
硬件资源是根本,DBA是为了充分利用硬件资源:(更新中--) 统一SQL语句: 减少SQL嵌套: 执行计划返回结果集(决定计划走向): 合理使用临时表: tempdb分多文件: OLTP 条件使用变量 ...
- Dotnet Core Windows Service
在dotnet 中有topshelf 可以很方便的写windows 服务并且安装也是很方便的,命令行 运行.exe install 就直接把exe 程序安装成windows 服务.当然 代码也要做相应 ...