SSIS 中的 DT_DATE 和 DT_DBTIMESTAMP 数据类型有啥区别?

Posted

技术标签:

【中文标题】SSIS 中的 DT_DATE 和 DT_DBTIMESTAMP 数据类型有啥区别?【英文标题】:What is the difference between DT_DATE and DT_DBTIMESTAMP data types in SSIS?SSIS 中的 DT_DATE 和 DT_DBTIMESTAMP 数据类型有什么区别? 【发布时间】:2021-12-28 08:43:55 【问题描述】:

DT_DATEDT_DBTIMESTAMP 都存储年、月、日、小时、分钟、秒和小数秒。

DT_DATEDT_DBTIMESTAMP有什么区别?

其中哪一个用于存储 SQL 数据库中的 DateTime 值?

【问题讨论】:

【参考方案1】:

根据微软:

A date structure that consists of year, month, day, hour, minute, seconds, and fractional seconds. The fractional seconds have a fixed scale of 7 digits.

DT_DATE 数据类型是使用 8 字节浮点数实现的。天数以整数增量表示,从 1899 年 12 月 30 日开始,午夜作为时间零。小时值表示为数字小数部分的绝对值。然而,一个浮点值不能代表所有的实数值;因此,可以在 DT_DATE 中显示的日期范围是有限制的。

另一方面,DT_DBTIMESTAMP 由内部具有年、月、日、小时、分钟、秒和毫秒的单独字段的结构表示。这种数据类型对它可以显示的日期范围有更大的限制。

https://docs.microsoft.com/en-us/sql/integration-services/data-flow/integration-services-data-types?view=sql-server-ver15

【讨论】:

那么使用哪一个来存储sql数据库中的datatime值 @variable,它取决于它在数据库中的类型。我想这个“sql 数据库”是 SQL Server,所以您可能需要在此处将 ssis 日期时间与 db 日期时间类型进行比较:docs.microsoft.com/en-us/sql/t-sql/data-types/… 并根据更好地适应数据库中类型的类型来决定 SSIS 类型跨度> 【参考方案2】:

DT_DATE

这两种数据类型的主要区别在于DT_DATE 用于将Excel 中使用的Ole 日期作为浮点数处理。您可以使用如下 SSIS 表达式从 DT_DATE 列中简单地检索此数字:

(DT_R8)[dateColumn]

甚至您可以使用以下表达式将浮动列转换为日期:

(DT_DATE)[OleDateColumn]

您可以阅读以下答案的更多信息:Is there a better way to parse [Integer].[Integer] style dates in SSIS?

DT_DBTIMESTAMP

此外,DT_DBTIMESTAMPDT_DBDATE 是用于存储日期的 SSIS 数据类型,其存储方式与它们在 SQL 数据库中的存储方式相同,这从添加到数据类型名称中的 DB 字符非常清楚。

SSIS SQL Server
DT_DBDATE Date
DT_DBTIMESTAMP DateTime

有用的资源

Mapping of Integration Services Data Types to Database Data Types

【讨论】:

这两个似乎相似 - DT_DBTIMESTAMP 和 DT_DBDATE?他们持有年月日小时分钟秒分数 Dt_dbdate 不存储时间部分,而 DT_DBTIMESTAMP 存储时间部分。使用Dt_dbdate,时间部分全部设置为零。 @variable 这在以下答案中进行了解释:***.com/questions/57221410/… @variable 您还需要什么澄清吗?

以上是关于SSIS 中的 DT_DATE 和 DT_DBTIMESTAMP 数据类型有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

SSIS输出日期为DD / MM / YYYY 00:00:00

ssis 中的 nzsql 命令

SSIS 中的 Merge Join 和 Lookup 转换有啥区别?

Netezza 中的代理键 - SSIS 和 Netezza 序列

SSIS 动态表和数据流中的列数

如何使用用户名和传递以及 SSIS 中的动态令牌从 API 获取数据