【发布时间】:2021-12-28 08:43:55
【问题描述】:
DT_DATE 和 DT_DBTIMESTAMP 都存储年、月、日、小时、分钟、秒和小数秒。
DT_DATE、DT_DBTIMESTAMP有什么区别?
其中哪一个用于存储 SQL 数据库中的 DateTime 值?
【问题讨论】:
标签: sql sql-server ssis etl ssis-data-types
DT_DATE 和 DT_DBTIMESTAMP 都存储年、月、日、小时、分钟、秒和小数秒。
DT_DATE、DT_DBTIMESTAMP有什么区别?
其中哪一个用于存储 SQL 数据库中的 DateTime 值?
【问题讨论】:
标签: sql sql-server ssis etl ssis-data-types
根据微软:
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 由内部具有年、月、日、小时、分钟、秒和毫秒的单独字段的结构表示。这种数据类型对它可以显示的日期范围有更大的限制。
【讨论】:
这两种数据类型的主要区别在于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_DBDATE 是用于存储日期的 SSIS 数据类型,其存储方式与它们在 SQL 数据库中的存储方式相同,这从添加到数据类型名称中的 DB 字符非常清楚。
| SSIS | SQL Server |
|---|---|
| DT_DBDATE | Date |
| DT_DBTIMESTAMP | DateTime |
【讨论】:
Dt_dbdate 不存储时间部分,而 DT_DBTIMESTAMP 存储时间部分。使用Dt_dbdate,时间部分全部设置为零。