我们知道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的更多相关文章

  1. Java进阶(二十三)java中long类型转换为int类型

    java中long类型转换为int类型 由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参 ...

  2. python中是否有单独的字符类型,通过下标的方式表示字符串中的字符

    说明: 在python中,没有单独的字符类型,一个字符呢就是一个大小为1的字符串. 并且可以通过下标的方式,表示字符串中的字符. 操作过程: 1.通过[ ]的方式表示字符串中的第几个字符 >&g ...

  3. Qt中实现将float类型转换为QString类型

    在使用Qt Creator编程时,难免会用到将float类型转换为QString类型的时候下面是我所有的方法: 1. 将QString类型转化为float类型,很简单 QString data; fl ...

  4. python中bytes类型转换为str类型

    使用的原因:基于URL解析报文的时候,要使用str类型,但是提供的确实bytes类型,报错: TypeError: must be str, not bytes 所以就把bytes类型转换为str类型 ...

  5. java中long类型转换为int类型

    由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参考: 一.强制类型转换 [java] l ...

  6. c++ string类型转换为char *类型

    string 是c++标准库里面其中一个,封装了对字符串的操作 把string转换为char* 有3中方法: 1.data 如: string str="abc"; char *p ...

  7. 小问题,小细节要注意(string类型转换为bool类型)

    一个表中的推荐字段是bit类型的,添加的时候推荐有两个值,如<asp:RadioButtonList ID="RadioButtonList1" runat="se ...

  8. Oracle 日期型 将timestamp类型转换为date类型

    Oracle将timestamp类型转换为date类型有三种方法 1.使用to_char先转为字符型,在使用to_date再转为日期型 select to_date(to_char(systimest ...

  9. 深度学习原理与框架-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 参 ...

随机推荐

  1. 转载|chrome developer tool—— 断点调试篇

    断点,调试器的功能之一,可以让程序中断在需要的地方,从而方便其分析.也可以在一次调试中设置断点,下一次只需让程序自动运行到设置断点位置,便可在上次设置断点的位置中断下来,极大的方便了操作,同时节省了时 ...

  2. css3特效样式库

    直接调用样式类即可: /* animation */ .a-bounce,.a-flip,.a-flash,.a-shake,.a-swing,.a-wobble,.a-ring{-webkit-an ...

  3. F和弦大横按

    用食指手掌关节顶住. 靠近品柱往上压 右手压住琴尾,这样就很轻松试下C跟F不停转换就快找到感觉 等熟练了,食指自然不会按太上 练得差不多了,手指向琴头倾压,有两个好处 1.手指后面的肉不会碰到弦 2. ...

  4. python中使用递归实现反转链表

    反转链表一般有两种实现方式,一种是循环,另外一种是递归,前几天做了一个作业,用到这东西了. 这里就做个记录,方便以后温习. 递归的方法: class Node: def __init__(self,i ...

  5. Qt实现QQ界面

    1.Qt实现QQ界面是通过QToolBox类来实现的,基本结构是:QToolBox里面装QGroupBox,然后QGroupBox里面装QToolButton,设置好相关属性即可 2.定义类继承QTo ...

  6. 第五章:大数据 の HBase 进阶

    本课主题 HBase 读写数据的流程 HBase 性能优化和最住实践 HBase 管理和集群操作 HBase 备份和复制 引言 前一篇 HBase 基础 (HBase 基础) 简单介绍了NoSQL是什 ...

  7. vb实验7-找出小于18000的最大素数

    vb实验7-找出小于18000的最大素数 vb实验7-找出小于18000的最大素数 ---–写给女朋友的题解 在窗体上画一个文本框,名称为TEXT1,两个命令按钮,C1和 C2,标题分别为" ...

  8. 【最大权闭合子图】bzoj4873 [Shoi2017]寿司餐厅

    4873: [Shoi2017]寿司餐厅 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 369  Solved: 256[Submit][Status ...

  9. CentOS7配置静态IP

    确保是在root用户下进行操作,首先进入network-scripts目录 cd /etc/sysconfig/network-scripts/ 通过ls列出该目录下的所有文件,其中"ifc ...

  10. 名片管理系统v1.1(tools)

    cords_list = []def show_cords(): print("*"*80) print("欢迎使用[名片管理系统]v.1.1") print( ...