您能否确认是否存在更“适当”的方法来从诸如'2018-10-27T19:57:33Z'
之类的字符串中删除字母?总是有2个要删除的符号,第一个需要替换为空格,第二个在和处的字符串不需要替换为空。它实际上是嵌套的,如果有机会对其进行优化,那就太好了。
select regexp_replace(regexp_replace(string, '[[:alpha:]]', ' '),'[[:alpha:]]', '')
https://dbfiddle.uk/?rdbms=postgres_10&fiddle=8d713f75bf6575dc85d67832ef6b0e5c
答案 0 :(得分:2)
我们仍然需要使用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 |
+-----------------------+----------------------+----------------------+--+
还有其他使用 replace,substring 函数的方法可以达到相同的结果。