【发布时间】:2019-10-29 14:15:31
【问题描述】:
我对 regexp 函数很陌生,想要一些建议。 我有一个包含管道分隔值的字段,并希望根据另一个值的位置提取一个值。 这样做的原因是我想要的值并不总是设置,但总是倾向于排在另一个值的第 5 位。希望到目前为止我说得通。
这里是字符串的一个例子:
|XYZ|CBA|365|15841.25|43.40|20171202|20181201|365|17024.94|46.64||20171202|20181201|365|17024.94|46.64||0.00|546.18|0000|
我想提取粗体和斜体的数字 - 546.18,它往往出现在第三个“365”之后的第 5 位,或者从下往上的第一个 365,这是我更喜欢的。
我已尝试反转字符串并获取 365 的第一个实例
第一步——反转字段(内容) 反向(内容)作为 content_rev
第二步 - 从 563 的第一个实例中恢复前 55 个字符并将字符串反转回原始
reverse(substr(content_rev, instr(content_rev, '\|563\|')-50, 55)) as extract_content
输出如下所示: |365|17024.94|46.64||0.00|546.18|8528|02|0540023096|2|2
从这一点上不确定如何获得突出显示的值
我确信这种方式不是最有效的方法,所以如果有人有更好的方法来获得结果,将不胜感激。
【问题讨论】:
-
461.01
-
另外,您使用的是 MySQL 还是 Hive?它们不是一回事。
-
对不起,我使用 hive sql,我更正了应该是 546.18 的数字
标签: regex hadoop hive hiveql delimiter