2017-03-28 36 views
0

提取整數值我有2列:nvarchar的拆分成在MySQL

Duration  | ID 
0h 7m 55sec. | 1 
0h 25m 33sec.| 2 
10h 5m 5sec. | 3 
4h 11m 31sec.| 4 

持續時間(爲nvarchar(255)) 我想要計算以秒爲單位的每個ID總數的持續時間。 我嘗試使用SUBSTRING,然後CAST,但它沒有給我所需的輸出。任何幫助,將不勝感激。

+0

SUBSTRING然後CAST是做的方式,分享你有什麼? –

+0

嗨,亞歷克斯,謝謝你驗證。但問題是,我不知道如何在'h''m'''上分割nvarchar當我使用Substring(Duration,4,CharIndex('m',Duration)) 它給了我例如7m 55而​​不僅僅是7 –

+0

再一次,發佈你所擁有的,Stack Overflow不是一個代碼寫入服務,而是希望你自己嘗試編寫代碼。我建議你對你的問題做一些研究(也許試試頁面頂部的搜索框),並嘗試自己編寫一些代碼。如果/當您遇到任何與您的代碼有關的問題時,請再次提問並解釋您所嘗試的內容,以及爲什麼它不適合您。請參閱[如何提問](http://stackoverflow.com/help/how-to-ask)尋求幫助,提出一個很好的問題以及[最小,完整,可驗證的示例](http://stackoverflow.com/幫助/ MCVE)。 – bc004346

回答

0

這個答案是針對MySQL的,因爲問題最初是標記的。

Yuck。但你可以這樣做:

select (substring_index(col, 'h ', 1) * 60 * 60 + 
     substring_index(substring_index(col, 'm ', 2), ' ', -1) * 60 + 
     substring_index(substring_index(col, 'sec.',1),' ', -1) 
     ) as duration_secs 
from t; 

這提取每個組件,然後使用隱式轉換進行計算。

+0

非常感謝Gordon Linoff。你能建議一種在Sql服務器上做同樣的方法嗎? –

+0

@Pradeep Yadav ...如果你想要一個SQL Server的答案,請將你的問題標記爲SQL Server - 它目前在MySQL中被標記。 – RMathis

+0

@RMathis我試圖在MySQL和SQL服務器上執行相同的操作。但是我現在已經爲SQL服務器添加了一個標籤。感謝您的建議。 –

0

以下查詢使用str_to_date來投射字符串,time_to_sec函數將時間部分轉換爲秒。

如果持續時間超過23小時59分59秒,則此方法將中斷。 @Gordon Linoff的方法將處理這種情況。

select id, 
     duration, 
     time_to_sec(str_to_date(duration,'%Hh %im %ssec.')) as seconds_elapsed;