只需掀開fromdt = Row.SampleDate
到
Row.SampleDate = fromdt
你的腳本應該可以工作,但如果你想要的話,請看下面的內容。
HOW TO DO IT沒有劇本--see下面的腳本方法
你可以,如果你使用Derived Column
轉型,而不是讓這個簡單了很多自己!數據轉換轉換不起作用,因爲它不允許您操縱列的值,而只能處理數據類型。但是在派生列中,您可以剪切字符串並將結果作爲日期進行投射。
因此,在您的數據流中源到派生列到目的地。
在派生列的添加新的列,並使用下列作爲表達式
然後使用此作爲Expression
(用含有ddMMyyyy
格式的日期name of your column
替換DateString
):
(DT_DATE)(SUBSTRING(DateString,3,2) + "/" + (LEFT(DateString,2) + "/" + RIGHT(DateString,4)))
(dt_date)
可以切換爲另一種日期格式,如果您願意並且該類型轉換將自動執行a在Derived Column
上設置Data Type
。然後在您的destination
將new derived column
映射到destination column
而不是您的source
的原始列。
就是這樣做的,沒有劇本。
HOW TO DO IT通過腳本
爲了解決途徑,如果你想留一個腳本,也許注入一些額外的邏輯,而不是簡單的轉換就可以通過在一個transformation
script component
做你data flow task
。它將取代上述的derived column
轉換,但基本上只能通過腳本完成相同的操作。我在這裏採取措施,我猜你已經知道一些在別人絆倒在帖子上的情況。
- 添加腳本組件一旦你選擇了「轉型」,並與您連接源
- 打開腳本組件,然後轉到「
Inputs and Outputs
」部分,並添加一個輸出持有新列,並設置數據類型。一個新列是必要的,因爲你正在改變數據類型
- 去 「
Input Columns
」 部分,選擇SampleDate
列
- 回去「
Script
」部分並選擇Vi作爲腳本語言的基礎。
- 點擊Edit Script開始編碼。
- 向下滾動直到找到sub
Input0_ProcessInputRow(ByVal Row...
這是您將放置代碼的位置。
此代碼:
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.SampleDate_IsNull Then
Row.DerivedDate = DateTime.ParseExact(Row.SampleDate, "ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture)
End If
End Sub
由於@Shiva的意見建議,你可以擴大這一點,並使用TryParseExact或在try catch塊包起來,這樣,如果解析日期失敗,只會清晰/從記錄中刪除值並導入將繼續。由於處理無效數據更多地是業務需求的問題,所以我會將其留給您。
你應該真的檢查答案還沒有提供之前提出一個新的問題:http://stackoverflow.com/questions/21833719/convert-flatfile-column-to-datetime – BIDeveloper
親愛的BIDeveloper,如果你認爲答案已經在那裏,讓我知道。相信我我已經嘗試了一切,但我的VB代碼不是將DDMMYYYY轉換爲YYYY-MM-DD HH:MM:SS格式。 –
雖然我不懷疑如何將字符串(從平面/文本文件)轉換爲(子)類型Date的變量的問題之前已被問到,答案「使用從您的SQL Server轉換」是錯誤的。 –