在Hive中使用regexp_replace从字符串中删除字母

时间:2018-10-28 20:28:29

标签: hive regexp-replace

您能否确认是否存在更“适当”的方法来从诸如'2018-10-27T19:57:33Z'之类的字符串中删除字母?总是有2个要删除的符号,第一个需要替换为空格,第二个在和处的字符串不需要替换为空。它实际上是嵌套的,如果有机会对其进行优化,那就太好了。

select regexp_replace(regexp_replace(string, '[[:alpha:]]', ' '),'[[:alpha:]]', '')

https://dbfiddle.uk/?rdbms=postgres_10&fiddle=8d713f75bf6575dc85d67832ef6b0e5c

1 个答案:

答案 0 :(得分:2)

我们仍然需要使用two regexp_replace函数,因为我们并没有用某个替换值替换所有字母

(或)

通过使用from_unixtimeunix_timestamp函数,我们可以从字符串值中删除 T,Z

例如:

hive> with cte as(select string("2018-10-27T19:57:33Z")ts) 
        select ts,
          regexp_replace(regexp_replace(ts,'T',' '),'Z','') regex_func,
          from_unixtime(unix_timestamp(ts,"yyyy-MM-dd'T'HH:mm:ss'Z'"),"yyyy-MM-dd HH:mm:ss") unix_time_func 
        from cte;
+-----------------------+----------------------+----------------------+--+
|          ts           |      regex_func      |    unix_time_func    |
+-----------------------+----------------------+----------------------+--+
| 2018-10-27T19:57:33Z  | 2018-10-27 19:57:33  | 2018-10-27 19:57:33  |
+-----------------------+----------------------+----------------------+--+

还有其他使用 replace,substring 函数的方法可以达到相同的结果。