提取整数值我有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,但它没有给我所需的输出。任何帮助,将不胜感激。
提取整数值我有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,但它没有给我所需的输出。任何帮助,将不胜感激。
这个答案是针对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;
这提取每个组件,然后使用隐式转换进行计算。
非常感谢Gordon Linoff。你能建议一种在Sql服务器上做同样的方法吗? –
@Pradeep Yadav ...如果你想要一个SQL Server的答案,请将你的问题标记为SQL Server - 它目前在MySQL中被标记。 – RMathis
@RMathis我试图在MySQL和SQL服务器上执行相同的操作。但是我现在已经为SQL服务器添加了一个标签。感谢您的建议。 –
以下查询使用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;
SUBSTRING然后CAST是做的方式,分享你有什么? –
嗨,亚历克斯,谢谢你验证。但问题是,我不知道如何在'h''m'''上分割nvarchar当我使用Substring(Duration,4,CharIndex('m',Duration)) 它给了我例如7m 55而不仅仅是7 –
再一次,发布你所拥有的,Stack Overflow不是一个代码写入服务,而是希望你自己尝试编写代码。我建议你对你的问题做一些研究(也许试试页面顶部的搜索框),并尝试自己编写一些代码。如果/当您遇到任何与您的代码有关的问题时,请再次提问并解释您所尝试的内容,以及为什么它不适合您。请参阅[如何提问](http://stackoverflow.com/help/how-to-ask)寻求帮助,提出一个很好的问题以及[最小,完整,可验证的示例](http://stackoverflow.com/帮助/ MCVE)。 – bc004346