我有一列,其中包含列表中的所有值。
Column A|Column B
AAA |1 2 45 67 89
BBB |16 25 36 45 89 63
CCC |52 63 98 41 22 66
在上表中,列B包含实际上是列表的字符串值。
我需要忽略B列中的前两个和后两个值。
我尝试使用分割函数,其中我可以忽略前两个值。但是要忽略后两个值是一个挑战,因为我的列表大小不同。
我使用的代码是:
select distinct column_A,column_B,split(column_B,'\\s')[2] AS ign_first_val,
split(column_B,'\\s')[-2] as ign_last_val
FROM Xyz
是否有任何简单的方法可以使用HQL忽略列表中的前两个和后两个值?
答案 0 :(得分:2)
您应该可以使用regexp_extract
:
select regexp_extract(column_B, '^\\s*(\\d+\\s+){2}(.*?)(\\s+\\d+){2}\\s*$', 2)
正则表达式的第一部分跳过前两个值,最后一部分跳过最后两个值,只剩下中间部分要提取到组2中,这是表达式返回的内容。
这是在regex101.com上工作的正则表达式的演示