SSIS 2008 脚本组件 DT_TIMESTAMP 到日期时间
SSIS 2008 SCript Component DT_TIMESTAMP to DateTime
我正在读取 VB.net 脚本源组件中的文件列表以创建文件名列表和 LastWriteDate
文件列表。 LastWriteDate
在脚本源中作为 DateTime 保存并输出到存储在目标 Recordset 中的 DT_DBTIMESTAMP
。
我在源和目标之间的数据流上放置了一个查看器,显示 DT_DBTIMESTAMP
为第一个文件保留了 2018-01-15 15:55:05.765
的值。
然后在控制流中,我对记录集执行 ForEach 循环。
在其中我有一个映射到 DT_TIMESTAMP
.
类型的 DateTime 变量
在 ForEach 内部,我有一个脚本组件,可将 DT_TIMESTAMP
映射到组件中。
该组件将 DT_TIMESTAMP
检索到 DateTime 变量中,但将其存储为
1/15/2018 3:55:06 PM
。
不仅格式改变了,精度也改变了。
我对这里发生的事情有点困惑,但我假设 DT_TIMESTAMP
中的完整日期和时间在我的第二个脚本中仍然可用,但我不清楚如何获取它。
有没有办法在我的脚本中设置 DateTime 变量以显示与 DT_TIMESTAMP
相同的精度?也许我需要将接收脚本变量定义为 DateTime 以外的其他变量,即 DT_TIMESTAMP
等价物?
有没有一种方法可以防止脚本组件中的 DateTime 变量将 DT_TIMESTAMP
的值四舍五入,从而将其转换为 1/15/2018 3:55:05 PM
?
SSIS 中日期数据类型的最高精度是:
DT_DBTIMESTAMP2 由年、月、日、小时、分钟、秒和小数秒组成的时间戳结构。小数秒的最大刻度为 7 位。
参考:
https://docs.microsoft.com/en-us/sql/integration-services/data-flow/integration-services-data-types
最准确的方法是将 2018-01-15 15:55:05.765
导入 varchar 变量。那么如果你需要在包中对变量进行date/time计算,将其转换为DT_DBTIMESTAMP2,它会保持2018-01-15 15:55:05.765
的精确值。如果你需要将值插入到SQLServer中,将它作为DATETIME
类型插入,你将得到2018-01-15 15:55:05.767
的值。这是由于日期时间数据类型的限制。
来自 Microsoft:
日期时间值四舍五入为增量 .000、.003 或 .007 秒
我添加了一个单独的答案,因为我认为这实际上可能有助于解决您的问题。另一个答案只是详细说明了数据类型的精度。
我不确定你想用你的 foreach 循环做什么,但我建议你在你的原始数据流中做行级别的工作。
日期时间变量的最高精度是秒。
我正在读取 VB.net 脚本源组件中的文件列表以创建文件名列表和 LastWriteDate
文件列表。 LastWriteDate
在脚本源中作为 DateTime 保存并输出到存储在目标 Recordset 中的 DT_DBTIMESTAMP
。
我在源和目标之间的数据流上放置了一个查看器,显示 DT_DBTIMESTAMP
为第一个文件保留了 2018-01-15 15:55:05.765
的值。
然后在控制流中,我对记录集执行 ForEach 循环。
在其中我有一个映射到 DT_TIMESTAMP
.
在 ForEach 内部,我有一个脚本组件,可将 DT_TIMESTAMP
映射到组件中。
该组件将 DT_TIMESTAMP
检索到 DateTime 变量中,但将其存储为
1/15/2018 3:55:06 PM
。
不仅格式改变了,精度也改变了。
我对这里发生的事情有点困惑,但我假设 DT_TIMESTAMP
中的完整日期和时间在我的第二个脚本中仍然可用,但我不清楚如何获取它。
有没有办法在我的脚本中设置 DateTime 变量以显示与 DT_TIMESTAMP
相同的精度?也许我需要将接收脚本变量定义为 DateTime 以外的其他变量,即 DT_TIMESTAMP
等价物?
有没有一种方法可以防止脚本组件中的 DateTime 变量将 DT_TIMESTAMP
的值四舍五入,从而将其转换为 1/15/2018 3:55:05 PM
?
SSIS 中日期数据类型的最高精度是:
DT_DBTIMESTAMP2 由年、月、日、小时、分钟、秒和小数秒组成的时间戳结构。小数秒的最大刻度为 7 位。
参考:
https://docs.microsoft.com/en-us/sql/integration-services/data-flow/integration-services-data-types
最准确的方法是将 2018-01-15 15:55:05.765
导入 varchar 变量。那么如果你需要在包中对变量进行date/time计算,将其转换为DT_DBTIMESTAMP2,它会保持2018-01-15 15:55:05.765
的精确值。如果你需要将值插入到SQLServer中,将它作为DATETIME
类型插入,你将得到2018-01-15 15:55:05.767
的值。这是由于日期时间数据类型的限制。
来自 Microsoft: 日期时间值四舍五入为增量 .000、.003 或 .007 秒
我添加了一个单独的答案,因为我认为这实际上可能有助于解决您的问题。另一个答案只是详细说明了数据类型的精度。
我不确定你想用你的 foreach 循环做什么,但我建议你在你的原始数据流中做行级别的工作。
日期时间变量的最高精度是秒。