使用HiveQL替换字符串中第一次出现的字符

时间:2017-05-25 01:33:47

标签: hive hql regexp-replace

我正在尝试替换Hive表中字符串中第一次出现的'-'。我正在使用HiveQL。我在这里和其他网站上搜索了这个主题,但是找不到明确的解释如何使用regexp_replace()的元字符来做到这一点。

这是我需要先替换的字符串' - '空格:16-001-02707 结果应该是这样的:16001-02707 这是我使用的方法:

select regexp_replace ('16-001-02707','[^[:digit:]]', '');

然而,这并没有做任何事情。

1 个答案:

答案 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 |
+------------------------------------+------------------------------------+------------------------------------+------------------------------------+------------------------------------+------------------------------------+