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

Removing alphabets from string using regexp_replace in Hive

您能否确认是否有更多 'proper' 方法从 '2018-10-27T19:57:33Z' 等字符串中删除字母?总是有 2 个符号要删除,第一个需要替换为 space,第二个位于字符串和字符串的符号需要替换为空。其实是嵌套的,如果有机会再优化一下就好了。

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

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

我们仍然需要使用 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 函数,我们可以获得相同的结果。