2012-07-28 58 views
1

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

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

回答

1

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

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

上面的每个问题都需要不同的解决方案。这里有一个直观的表现我怎么打破了存在的问题和相应的修复:

enter image description here

首先注意日期格式在columns A, D, E, F提及。这就解释了为什么4/1/2011的“固定”版本看起来与源代码相同。事实上,固定的版本是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与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))) 
+0

另一个选项是选择A列,并选择*数据|文本到列|固定宽度|下一个|下一个|日期:DMY *完成。然后以DMY格式格式化数字。如果需要,目标可以设置为另一列。 – 2012-07-30 08:03:32