当前位置: 首页 > 面试题库 >

CAST vs ssis数据流隐式转换差异

堵恺
2023-03-14
问题内容

我有一个SSIS包,可以将一些数据从Oracle传输到SQL Server。

在Oracle中,日期以浮点数存储,例如42824 == '2017-04-01'-用Delphi编写使用数据库的应用程序。

select CAST(42824 as datetime)
在Management Studio导致'2017-04-01 00:00:00.000',相同的值(42824)插入由封装成在SQL
Server表显示日期时间列2017-03-30 00:00:00.000

注意:此数字的源数据类型为DT_R8DT_UI4在数据转换组件中将类型更改为不会更改任何内容

谁能解释一下?


问题答案:

存储在Oracle(42824)中的值称为日期序列,它也用于中Microsoft Excel

日期序列表示日期值和初始值之间的天数,即 1899-12-30

CAST方法

从Microsoft Docs-CAST和CONVERT(Transact-SQL):

仅当从字符数据转换为datetime或smalldatetime时才受支持。将仅表示日期或仅时间部分的字符数据转换为datetime或smalldatetime数据类型时,未指定的时间部分设置为00:00:00.000,未指定的日期部分设置为1900-01-01

因此,CAST函数1900-01-01在转换日期时会将值视为初始值。因此,在使用它转换日期序列时,我们需要减去2天

有两种使用SQL Server将其转换为日期的方法:

select DATEADD(d,42824,'1899-12-30')

select CAST(36464 - 2 as SmallDateTime)

SSIS隐式转换

同样根据此Microsoft文档文章

DBTYPE_DATE(这是自动化的DATE类型。在内部被表示为双精度型。整体部分是自1899年12月30日以来的天数,小数部分是一天的一部分。这种类型的精度为1秒,因此有效标度为0。)

因此,SSIS中的隐式转换在1899-12-30转换日期时将值视为初始值。因此,使用它转换日期序列时无需减去2天



 类似资料:
  • 一、隐式转换 1.1 使用隐式转换 隐式转换指的是以 implicit 关键字声明带有单个参数的转换函数,它将值从一种类型转换为另一种类型,以便使用之前类型所没有的功能。示例如下: // 普通人 class Person(val name: String) // 雷神 class Thor(val name: String) { // 正常情况下只有雷神才能举起雷神之锤 def hamm

  • JavaScript 是非常宽容的,「来者不拒」,不在乎什么类型。 例如,它如果想要接受数字,它并不拒绝其他类型的值,而是试图把它们转换成数字: > '5' - '2' 3 > '5' * '2' 10 自动转换为布尔值通常不会引起问题,而且往往很有用(译注:比如在C语言里,根本就没有布尔类型。 即使如此,这些隐式转换也会引起怪癖(quirks)。 但是当自动转换为字符串时,可能会引起问题。 一

  • 我试图理解以下转换的机制 根据整数常量,的类型是。这可以通过执行轻松检查; 根据内隐转换语义学: “整数提升是对秩小于或等于int[…]秩的任何整数类型的值的隐式转换设置为int或unsigned int类型的值。“ 如下文所述 msgstr"所有有符号整数类型的行列等于相应无符号整数类型的行列" 因此,升级适用,因为的秩与的秩相同。 这种晋升被定义为 如果int可以表示原始类型的整个值范围(或原

  • 问题内容: 我正在做s和s的乘法和除法,但我忘记了隐式转换规则(问题中的单词似乎太含糊,以至于Google不能比在这里问得更快)。 如果我有两个s,但我想进行浮点除法,是否只需要强制转换一个或两个操作数?如何相乘-如果我将a 和an 相乘,答案是a 吗? 问题答案: 您不能将结果除以a ,反之亦然。 因此答案是: 如果我有两个s,但是我想做浮点除法…? 一个演员就足够了。 如果我将a 和an 相乘

  • 我在webmatrix上使用经典的asp完成这项工作 在我的数据库中,存储的日期格式为MM/DD/YYYY

  • 问题内容: “隐式转换”和“显式转换”有什么区别?Java和C ++的区别是否不同? 问题答案: 显式转换是您使用某种语法 告诉 程序进行转换的地方。例如(在Java中): 隐式转换是在没有任何语法的情况下进行转换的地方。例如(在Java中): 应该注意的是(在Java中)涉及原始类型的转换通常涉及某种表示形式的更改,并且可能导致精度降低或信息丢失。相比之下,仅涉及引用类型的转换不会更改基本表示形