2012-07-24 76 views
1

我在ETL過程中工作,在表varchar中有一列,數據爲28JUN1952。 這將始終採用此格式,即日期爲2位數字,月份爲3個字母,年份爲4位數字。ETL中的數據轉換SSIS

我能夠將它轉換成日期列,我需要這個來yyyyMMdd格式,即變成19520628。我可以將月份和日期分開,但如果月份是1位數字,則無法在本月添加填充。 JanFeb

是否有任何其他方式來轉換數據格式或任何其他替代方法來添加填充?

我只需要在SSIS中進行轉換。

+0

你能後你有這麼遠的公式? – 2012-07-24 07:09:25

回答

2

,最快的途徑是增加一個腳本轉換。

  1. 在輸入和輸出選項卡上,展開輸出0,選擇輸出列,單擊添加列。 2.將列重命名爲ccyymmdd,並更改數據類型。我不確定你的目標類型是什麼(int32,string?),但我會假設字符串,因爲我很懶
  2. 在輸入列選項卡上,選擇字符串日期源列(假設它叫做srcDate)
  3. 裏面的腳本任務,假設C#,使用這樣的代碼

內部腳本任務

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    DateTime x = DateTime.MinDate; 
    if (DateTime.TryParse(Row.srcDate, out x)) 
    { 
     Row.ccyymmdd = x.ToString("yyyyMMdd"); 
    } 
    else 
    { 
     // Handle NULL values however you wish 
     // Assign "known bad value" 
     // Row.ccyymmdd = "99991231"; 
     // Or set the null property to true (preferred) 
     Row.ccyymmdd_IsNull = true; 
    } 

} 
+0

太棒了。萬分感謝。 – 2012-07-24 08:08:04

0

試試這個:

declare @d varchar(20)='28JAN1952'; 

SELECT replace(CONVERT(date,RIGHT(@d,4)+SUBSTRING(@d,3,3)+LEFT(@d,2)),'-','') 
+1

我無法在那裏添加SQL命令。我需要一些SSIS轉換。 – 2012-07-24 06:10:41