2017-03-28 35 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;