我有一个以数组形式存储字符串的表。我不明白为什么,但简单的例子是这样的:
+--------+----------------------------------+
| reason | string |
+--------+----------------------------------+
| \N | \N\N\N\NXXX - ABCDEFGH\N\N |
| \N | \N\N\N\NXXX - ABCDEFGH |
| \N | \N\N\N\N |
| \N | \N\N\N\NXXX - ABCDEFGH\N |
| \N | \N\N |
| \N | \N\N\N |
| \N | \N |
+--------+----------------------------------+
我们在上表中看不到,但第一个字符串的真正格式是这样的
基本上,我想检索的是:
+--------+----------------------------------+
| reason | string |
+--------+----------------------------------+
| \N | XXX - ABCDEFGH |
+--------+----------------------------------+
-始终保持不变,但defgh可以是任何字符串。问题是我不能使用表path.path.path\u path[4],因为字符串-defgh可能是第4个或数组的任何元素(甚至是第20个)。
试图使用 where lower(path.path.string) like (' - %')
但收到错误
Select
path.path.reason,
path.path.string
From table_name
Where path.id = '123'
And datestr = '2018-07-21'
1条答案
按热度按时间kknvjkwl1#
这个正则表达式将为您完成这项工作
([^\N$])+
.假设图像中显示的角色是
$
.首先,你可以使用
regexp_extract()
检索特定数组元素。它具有以下语法:第二,你可以使用
regexp_replace
具有以下语法:试验数据
将导致
注意:指定索引的“0”在基于模式的提取之后生成匹配。
下面的语句将替换出现的任何“$”
更多关于
regexp\u replace®exp\u extract():https://cwiki.apache.org/confluence/display/hive/languagemanual+udf#languagemanualudf-字符串函数