2015-08-27 40 views
0

我試圖使用SSIS將數據導出到平面文件(.csv)中,然後將其保存到目錄中,以便將其掃描並導入某個目錄會計軟件。該軟件(不幸)只能識別MM/DD/YYYY時間的日期。我試過每種方法來將從SQL中提取的數據轉換或轉換爲MM/DD/YYYY,但不管怎樣,數據總是在平面文件連接中被識別爲DT_Date或DT_dbDate數據類型,並保存爲YYYY-MM-DD。數據類型轉換不會粘在SSIS中

我已經嘗試過各種數據轉換,派生列的組合,並將平面文件列的屬性更改爲字符串,希望我至少可以使用子字符串操作來正確獲取此格式,但它永遠不會失敗下降爲YYYY-MM-DD。這真是莫名其妙。 OLE DB源文件中的預覽將顯示日期爲「MM/DD/YYYY」,但不知何故,當它遇到平面文件時,總是變爲「YYYY-MM-DD」。

我試着尋找解決方案(例如,這裏:Stubborn column data type in SSIS flat flat file connection manager won't change. :(),但沒有運氣。令人驚訝的是,如果我只是在Excel中打開文件並保存它,它會在文本編輯器中將日期顯示爲「MM/DD/YYYY」,只會爲此百慕大三角形的跳躍添加更多神祕感。

如果有任何提示,我會非常感激。

+0

如果我理解正確,你是_exporting_一個還不存在的文件。你有一個派生列轉換將SQL列轉換爲字符串嗎?這裏有一個鏈接,告訴你如何做到這一點:http://stackoverflow.com/questions/16711349/ssis-expression-convert-date-to-string。您需要確保添加新列,而不是替換現有列。現在,您應該可以右鍵單擊/顯示高級編輯器,並且在_input和output properties_中,您可以觀察該列的數據類型。它應該始終保持字符串。 –

+0

還有一件事 - 確保您在**文本編輯器(記事本)中打開CSV文件進行檢查。不要在Excel中打開它 - 這只是混淆了事情。一個csv文件實際上是一個文本文件,而不是一個excel文件。 –

+0

..最後不要害怕刪除文本文件的目標和readd。有時候,即使文件不存在,它也可能會讓它的數據類型停滯不前。不幸的是,SSIS中的數據類型每天都會發生。它經常會出錯,固執地拒絕修復它,直到你按照設定的順序執行一組神奇的操作,而你下次將無法記住它。 –

回答

0

這已經有一段時間了,但我今天剛剛碰到這個,因爲我有同樣的問題,並希望能夠讓某些人省去了解決它的麻煩。對我來說有效的是在派生列轉換中添加一個新字段,而不是嘗試更改現有字段。

編輯

我不能特洛伊Witthoeft的回答發表評論,但要注意,如果你有一個日期類型的輸入,你將無法做到串。相反,你可以使用這樣的事情:

(DT_WSTR,255)(MONTH([Visit Date])) + "/" + (DT_WSTR,255)(DAY([Visit Date])) + "/" + (DT_WSTR,255)(YEAR([Visit Date]))

0

這是一個日期格式問題。

在SQL和SSIS中,日期有一個literal string format,即YYYY-MM-DD。忽略它們在數據預覽器和/或Excel中顯示的方式。日期根據您的Windows regional prefrences顯示給您。

enter image description here

以上 - 與美國不同 - 在英國的人會看到所有的日期爲DD/MM/YYYY。我們顯示日期的方式並不是它們存儲在磁盤上的方式。當您在Excel中打開時,它會將此轉換視爲一種優勢。直到您保存日期根據您的區域偏好存儲爲文本。

爲了讓日期始終顯示相同的方式。我們需要將它們保存爲日期,而不是文本串。爲此,我們必須從日期列DT_DATEDT_DBDATE以及字符串列中獲取數據:DT_STRDT_WSTR。然後,將這個新的字符串列映射到您的csv文件。兩種方法來做到這一點「日期到字符串」轉換...

首先,有SQL做它。更新您的OLE DB Source查詢並添加一列...

​​

另一種方法是讓SSIS做到這一點。添加派生列組件與表達

SUBSTRING([MyDateColumn],6,2) + "/" + SUBSTRING([MyDateColumn],8,2) + "/" + SUBSTRING([MyDateColumn],1,4) 

的字符串列映射到您的CSV文件,而不是日期列。希望這可以幫助。