Netezza - 从包含文本和数字的不同 varchar 字段中提取时间(以秒为单位)
Netezza - Extract time in seconds from varying varchar field containing text and numbers
我目前正在查看一些包含设备正常运行时间的数据,它是 table 上的一个 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
语句先查找文本,"hours" 等,提取第一个数值转换将其转换为秒,然后将剩余的数值转换为秒并相加。
当然不是在寻找一个完整的解决方案,只是一些可能有效的建议。
编辑:如果可能,需要在不改变 table 的情况下执行此操作。
这很痛苦。我的建议是 case
和 date/time 逻辑。我对date/times的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
分隔字符串的每种可能格式。
然后在末尾查找 "time" 组件并将其转换为秒。我不知道如何在 Netezza 中做到这一点。
我目前正在查看一些包含设备正常运行时间的数据,它是 table 上的一个 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
语句先查找文本,"hours" 等,提取第一个数值转换将其转换为秒,然后将剩余的数值转换为秒并相加。
当然不是在寻找一个完整的解决方案,只是一些可能有效的建议。
编辑:如果可能,需要在不改变 table 的情况下执行此操作。
这很痛苦。我的建议是 case
和 date/time 逻辑。我对date/times的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
分隔字符串的每种可能格式。
然后在末尾查找 "time" 组件并将其转换为秒。我不知道如何在 Netezza 中做到这一点。