Netezza - 从包含文本和数字的变量varchar字段中提取时间(以秒为单位)

时间:2016-10-31 13:21:26

标签: sql netezza

我目前正在查看一些具有设备正常运行时间的数据,表格上有一个CHARACTER_VARYING字段,数据看起来像这样 -

11 hours, 02:33.00 3 days, 09:37:20.37 17 days, 16:05:32.00 58 minutes, 02.00

正如您在上面所看到的那样,它总是在数据被提取时的最高值,但它不会计入高于天数的数字,它不会在数据中提取数据。进入几个月,即127 days, 16:05:32.00

我需要提取每行的总时间(以秒为单位),我一直在考虑使用CASE WHEN语句来查找文本,"小时"等,提取第一个数值转换为秒,然后将剩余的数值转换为秒并加在一起。

当然不是在寻找完整的解决方案,只是对可行的方法提出一些建议。

编辑:如果可能的话,如果不改变表格,则需要这样做。

1 个答案:

答案 0 :(得分:0)

这是一种痛苦。我的建议是case和日期/时间逻辑。我对日期/时间的Netezza特定函数不是很熟悉,但逻辑是这样的:

select (case when val like '% hours%'
             then cast(substr(val, instr(val, ' ')) as int) * 60 * 60 +
                  -- extract the seconds from substr(val, -8, 8)
             . . .

也就是说,从字符串中获取第一个数字并将其乘以适当的数量以获得秒数。使用case分隔出字符串的每种可能格式。

然后寻找"时间"最后的组件并将其转换为秒。我不知道在Netezza如何做到这一点。