我正在尝试替换Hive表中字符串中第一次出现的'-'
。我正在使用HiveQL。我在这里和其他网站上搜索了这个主题,但是找不到明确的解释如何使用regexp_replace()
的元字符来做到这一点。
这是我需要先替换的字符串' - '空格:16-001-02707
结果应该是这样的:16001-02707
这是我使用的方法:
select regexp_replace ('16-001-02707','[^[:digit:]]', '');
然而,这并没有做任何事情。
答案 0 :(得分:0)
select regexp_replace ('16-001-02707','^(.*?)-', '$1');
16001-02707
在评论中提出OP问题
with t as (select '111-22-333333-4-555-6-7-8888-999999' as col)
select regexp_replace (col,'^(.*?)-','$1')
,regexp_replace (col,'^(.*?-.*?)-','$1')
,regexp_replace (col,'^((.*?-){2}.*?)-','$1')
,regexp_replace (col,'^((.*?-){3}.*?)-','$1')
,regexp_replace (col,'^((.*?-){4}.*?)-','$1')
,regexp_replace (col,'^((.*?-){5}.*?)-','$1')
from t
+------------------------------------+------------------------------------+------------------------------------+------------------------------------+------------------------------------+------------------------------------+
| _c0 | _c1 | _c2 | _c3 | _c4 | _c5 |
+------------------------------------+------------------------------------+------------------------------------+------------------------------------+------------------------------------+------------------------------------+
| 11122-333333-4-555-6-7-8888-999999 | 111-22333333-4-555-6-7-8888-999999 | 111-22-3333334-555-6-7-8888-999999 | 111-22-333333-4555-6-7-8888-999999 | 111-22-333333-4-5556-7-8888-999999 | 111-22-333333-4-555-67-8888-999999 |
+------------------------------------+------------------------------------+------------------------------------+------------------------------------+------------------------------------+------------------------------------+