1

我在使用 Sql Server 中的 Visual Studio 导入数据时遇到了一个烦人的问题。我使用 Visual Studio 创建了一个 SSIS 导入包来导入 Excel 文件 (.xlsx)。我导入的工作表有一列填充了 datetype 值。有些值是左对齐的,有些是右对齐的。如果我将整个列格式化为日期类型,我仍然会在该列上得到两种不同类型的对齐方式:例如 4/1/2011 是右对齐,13/01/2011 是左对齐。我为该列导入带有 nvarchar 的文件,我得到左对齐值的 NULL 值。如果我为该列导入具有 datetime 数据类型的文件,我会得到右对齐的 NULL 值。

我不在乎我的 Sql 数据库中的信息是如何“登陆”的,无论是 nvarchar 还是 datetime,但我需要完整的信息,没有 NULLS。这似乎主要是一个 Excel 问题,因为 Excel 不会将这些值视为相同的数据类型,因此存在不同类型的对齐。请问有什么建议吗?感谢任何建议/建议。谢谢你。

4

1 回答 1

1

我认为你在这里有两个问题。一,右对齐的值被解释为日期,但它们是错误的,因为 Excel 认为它们是 m/d/yyyy 而你想要 d/m/yyyy。二,左对齐的值被解释为文本。

不幸的是,当数据已经存在时对列应用格式不会改变底层存储。由于 Excel 已经将数据弄乱了,您需要自己解析出正确的值。

上述每个问题都需要不同的解决方案。这是一个视觉效果,显示了我如何分解问题和相应的修复:

在此处输入图像描述

首先注意中提到的日期格式columns A, D, E, F。这解释了为什么 2011 年 4 月 1 日的“固定”版本看起来与源代码相同。事实上,固定版本是 1 月 4 日,而源是 4 月 1 日。

这是流程和公式:

B 列和 C 列是助手。他们希望简化column D. 这里的错误无关紧要;它们将在最后一步被忽略:

B3: =FIND("/",A3)
C3: =FIND("/",A3,B3+1)

D 列通过解析数字在斜线中的位置并建立日期值来处理解释为文本的数据。您不需要这个,但为了清楚起见,我将其展示出来:

D3: =DATE(RIGHT(A3,4),MID(A3,B3+1,C3-B3-1),LEFT(A3,B3-1))

E 列处理解释为日期但 d 和 m 颠倒的数据。同样,不需要,但为了清楚起见:

E3: =DATE(YEAR(A3),DAY(A3),MONTH(A3))

F 列将 D 和 E 与 an 结合在一起IF以应用适当的修复:

F3: =IF(ISERROR(VALUE(A3)),DATE(RIGHT(A3,4),MID(A3,B3+1,C3-B3-1),LEFT(A3,B3-1)),DATE(YEAR(A3),DAY(A3),MONTH(A3)))
于 2012-07-28T23:36:21.083 回答