2016-07-28 110 views
-1

24小時格式轉換datetime我有幾個日期時間字段,我需要的時間是24小時制。在派生列ssis

時間間隔開始時間 2016年1月4日03.30

我需要它作爲

時間間隔開始時間 2016年1月4日15.30

我開發在SSIS派生列此代碼。但我不認爲這是正確的:

(DATEPART("Hh",[Interval Start Time]) == 01 ? "13" : 
    (DATEPART("Hh",[Interval Start Time]) == 02 ? "14" : 
     (DATEPART("Hh",[Interval Start Time]) == 03 ? "15" : 
      (DATEPART("Hh",[Interval Start Time]) == 04 ? "16" : 
      (DATEPART("Hh",[Interval Start Time]) == 05 ? "17" : 
       ""))))) 

我將不勝感激任何幫助。

+0

如何區分實際的3AM和3PM? –

+0

該服務在上午9點至下午5點半之間運行,因此凌晨3點將不會有任何服務,因此03.30將爲15.30。謝謝 – Djbril

回答

0

只需使用CONVERT

SELECT CONVERT(char(16), [Interval Start Time], 120) 

如果你想擁有的,而不是一個冒號(:)分隔點(.)的時候,你可以添加REPLACE

SELECT REPLACE(CONVERT(char(16), [Interval Start Time], 120), ':', '.') 

順便說一句, Datetime data type doesn't store display format.

+0

@ Zohar你提供的答案:SELECT CONVERT(char(16),[Interval Start Time],120)不起作用。當我得到13.30時,我仍然可以在01:30得到時間。 – Djbril

+0

你確定嗎? [檢查這個在線演示。](http://rextester.com/VKLN35066) –

0

看起來你只需要爲每個日期時間添加12小時,例如

DATEADD(HOUR, 12, [Interval Start Time]) 

或者複製邏輯在你的問題,你可以有條件地申請加入:

CASE WHEN DATEPART(HOUR, [Interval Start Time]) <= 5 THEN [Interval Start Time] ELSE DATEADD(HOUR, 12, [Interval Start Time]) END 
+0

這將給每個中斷中午12:00之前的錯誤結果... –

+0

@Chris這也不起作用。當我應該得到13.30時,我仍然得到01:30。謝謝 – Djbril

0

如果你正在嘗試的日期時間,以24小時格式轉換,那麼你可以試試下面的查詢。

select CONVERT(VARCHAR(24),getdate(),121); 
Or 
select CONVERT(datetime,getdate(),121); 

OUTPUT : 2016-07-28 20:14:10.937 
+0

1.更好地將'char'用於固定長度的字符串而不是'varchar'。 2.問題中的時間分辨率是分鐘,沒有顯示毫秒時間分辨率的要點。 3.你的第二條語句將'datetime'轉換爲'datetime'。我猜你想把它轉換成'varchar' ... –

+0

我想在SSIS派生列中這樣做。 – Djbril

0

試試這個:

(DT_WSTR,4)YEAR([Interval Start Time])+"-"+ 
RIGHT("0" + (DT_WSTR,2) MONTH([Interval Start Time]),2)+ "-"+ 
RIGHT("0" + (DT_WSTR,2) DAY([Interval Start Time]),2) +" "+ 
(datepart("hour",[Interval Start Time]) == 1 ? "13" : 
datepart("hour",[Interval Start Time]) == 2 ? "14" : 
datepart("hour",[Interval Start Time]) == 3 ? "15" : 
datepart("hour",[Interval Start Time]) == 4 ? "16" : 
datepart("hour",[Interval Start Time]) == 5 ? "17" : "") 
+"."+RIGHT("0" + (DT_WSTR,2) datepart("mi",[Interval Start Time]),2) 

以爲你正在尋找的SSIS任務「派生列」的表達,並假定「時間間隔開始時間」爲日期時間。 我希望這個幫助。

+0

這不起作用。我收到一個錯誤。 「數據流任務錯誤:」年「功能不支持數據類型」DT_WSTR「。 – Djbril

+0

這是一個簡單的強制轉換,它總是有效。您是否在派生列中使用表達式? –

+0

「間隔開始時間」已經是我使用的日期時間格式:(DT_DBTIMESTAMP)派生列中的[間隔開始時間]。 – Djbril