2012-07-28 108 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