我准备通过SSIS将数据从MySQL中的表导入SQL SErver 2008。但由于表中的日期,我无法转移。有一些日期时间数据类型的数据,比如'0001-01-10',它在SQL Server中不支持日期的年份范围从1753到9999.那么如何在MySQL查询中解决这个问题呢?
答案 0 :(得分:1)
如果这些日期是有效数据,那么在SqlServer中没有简单的方法来处理它。基本上,需要一个自定义日期处理程序。通过将年份分成单个整数字段并将月份和日期放入具有常量年份的日期字段,可以实现足够好的近似。每次比较都会变得复杂。
更有可能 - 对于大多数业务应用程序 - 这样的日期是无用的,应该清理,或者用NULL值替换。
答案 1 :(得分:0)
请注意,SSIS数据类型的 none 实际上等同于SQL Server datetime 或 smalldatetime 类型,其允许的受限范围日期。
许多在线文档表明DT_DBTIMESTAMP等同于SQL datetime 。这在某种程度上是正确的。允许 datetime 范围之外的日期将很乐意转换为DT_DBTIMESTAMP(或任何SSIS日期类型) - 但如果您尝试将它们写入SQL datetime ,则会导致错误柱。
令人困惑的是,SSIS将外部SQL datetime 列表示为DT_DBTIMESTAMP,这表明 datetime 和DT_DBTIMESTAMP是等效的,而不是。
这意味着您无法通过强制转换预测SSIS中的超出范围的日期问题。如果您最终要写入 datetime 或 smalldatetime 列,则必须明确检查日期是否超出范围(< 1/1 / 1753年,或1/1/1900为smalldatetime)。