Sql CAST与ssis数据流隐式转换差异
我有一个SSIS包,它将一些数据从Oracle传输到SQL Server 在Oracle中,日期存储为浮点数,例如Sql CAST与ssis数据流隐式转换差异,sql,sql-server,oracle,ssis,etl,Sql,Sql Server,Oracle,Ssis,Etl,我有一个SSIS包,它将一些数据从Oracle传输到SQL Server 在Oracle中,日期存储为浮点数,例如42824==“2017-04-01”-使用数据库的应用程序是用Delphi编写的 选择CAST(42824作为日期时间) 在Management Studio中,结果是'2017-04-01 00:00:00.000',由包插入SQL Server表中datetime列的相同值(42824)显示2017-03-30 00:00:00.000 注:此数字的源数据类型为DT_R8,将数
42824==“2017-04-01”
-使用数据库的应用程序是用Delphi编写的
选择CAST(42824作为日期时间)
在Management Studio中,结果是
'2017-04-01 00:00:00.000'
,由包插入SQL Server表中datetime列的相同值(42824)显示2017-03-30 00:00:00.000
注:此数字的源数据类型为DT_R8
,将数据转换组件中的类型更改为DT_UI4
不会改变任何内容
有人能解释一下吗?关于日期系列
存储在Oracle(42824
)中的值称为日期序列,它也用于Microsoft Excel
日期序列表示日期值和初始值(即1899-12-30
有关日期序列的更多信息,请访问:
select DATEADD(d,42824,'1899-12-30')
select CAST(36464 - 2 as SmallDateTime)
SSIS隐式转换
也根据这个
DBTYPE_DATE(这是一种自动日期类型。它在内部表示为双精度。整个部分是自1899年12月30日以来的天数,小数部分是一天的小数。此类型的精度为1秒,因此有效刻度为0。)
在SSIS中,隐式转换将数值“代码> 1899—1230</代码>作为铸造日期的初始值。因此,在使用它转换日期序列时,无需减去2天
谢谢您的回复。我知道其中的区别,事实上,我在Oracle查询中编写了select-2。问题是我最终得到了-4!不知何故,看起来IntegrationServices“知道”这应该像日期一样对待,并减去另一个2。正如我所写的,如果我从management studio和SSIS包显式地将相同的(整数)值插入datetime,我会得到两个不同的日期。在SSIS中,如何将整数转换为日期?显式地,我不是。我只是将odbc源中的整数列映射到数据流任务中oledb目标中的datetime列。源SSIS数据类型为DT_R8。“DBTYPE_DATE(这是一种自动日期类型。它在内部表示为双精度。整个部分是自1899年12月30日以来的天数,小数部分是一天的小数。此类型的精度为1秒,因此有效刻度为0)。”
就是这样:)我必须说我觉得有点奇怪,微软在不同的工具中使用不同的方法,甚至在一个工具中使用不同的方法,集成服务是sql server的一部分。无论如何,非常感谢你。