在配置单元中使用regexp\u replace从字符串中删除字母表

x33g5p2x  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(427)

你能确认有没有更“正确”的方法来删除像这样的字符串中的字母吗 '2018-10-27T19:57:33Z' ? 总是有两个标志需要删除,第一个需要用空格替换,第二个在字符串的和处需要用空白替换。它实际上是嵌套的,如果有机会优化它,那就太好了。

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

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

1rhkuytd

1rhkuytd1#

我们还需要使用 two regexp_replace 函数,因为我们不是用一些替换值替换所有的字母表。
(或)
通过使用 from_unixtime 以及 unix_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  |
+-----------------------+----------------------+----------------------+--+

还有其他方法使用替换,子串函数,我们可以达到同样的结果。

相关问题