【问题标题】: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 值?

【问题讨论】:

    标签: sql sql-server ssis etl ssis-data-types


    【解决方案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

    有用的资源

    【讨论】:

    • 这两个似乎相似 - DT_DBTIMESTAMP 和 DT_DBDATE?他们持有年月日小时分钟秒分数
    • Dt_dbdate 不存储时间部分,而 DT_DBTIMESTAMP 存储时间部分。使用Dt_dbdate,时间部分全部设置为零。
    • @variable 这在以下答案中进行了解释:stackoverflow.com/questions/57221410/…
    • @variable 您还需要什么澄清吗?
    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多