2013-03-28 94 views
1

我試圖通過SSIS包在SQL Server的datetime數據類型列中插入日期值。SSIS包日期格式問題轉換爲年和年轉換爲日

在源*中。 csv文件格式爲dd-mm-yy

當我手動運行SSIS包時沒有錯誤。 .csv文件DD-MM-YY的日期格式已成功插入到DD-MM-YYYY格式的SQL服務器數據庫中。

但是,當我通過SQL Server代理中的作業運行相同的包時,它會轉換爲不正確的日期格式,因爲DAY已轉換爲YEAR,YEAR已轉換爲DAY。

例如,如果.csv文件中的日期是15-03-13(DD-MM-YY),它將被插入爲13-03-2015

試圖在數據庫中以正確格式獲取日期,但都是徒勞的。

請建議如何解決此問題。

在此先感謝。

+1

重新說明問題:平面文件源,數據格式爲dd-mm-yy。您導入時,日期被解析爲dd-mm-yy(期望)。當通過SQL代理執行時,日期被解析爲yy-mm-dd。如果這是準確的,它就像是一個本地化問題。如果您將RDC放入服務器並手動執行包,則使用何種格式? 'dtexec.exe/file myPackage.dtsx' – billinkc 2013-03-28 12:15:28

+0

@billinkc我會說同樣的。檢查您的系統朝向SQL數據庫本地化設置。 – 2013-05-10 09:31:39

回答

0

示例如何做到這一點,示例數據:

enter image description here

  1. 你需要列轉換爲字符串:

enter image description here

2.然後轉換到SQL女士日期格式:

enter image description here

3.Derived列代碼:

SUBSTRING([Copy of Datee],7,2) + "-" + SUBSTRING([Copy of Datee],4,2) + "-" + SUBSTRING([Copy of Datee],1,2)

(DT_DATE)(SUBSTRING([Copy of Datee],7,2) + "-" + SUBSTRING([Copy of Datee],4,2) + "-" + SUBSTRING([Copy of Datee],1,2))

結果:

enter image description here

0

在派生列,你必須寫:

DateReceived == "" ? NULL(DT_DATE) : (DT_DATE)((LEN(RTRIM(DateReceived)) == 10 ? SUBSTRING(DateReceived,7,4) : ("20" + SUBSTRING(DateReceived,7,2))) + "-" + SUBSTRING(DateReceived,4,2) + "-" + SUBSTRING(DateReceived,1,2)) 
相關問題