Удаление алфавитов из строки с помощью regexp_replace в Hive - PullRequest
0 голосов
/ 28 октября 2018

Не могли бы вы подтвердить, что существует более «правильный» способ удаления алфавитов из строки, такой как '2018-10-27T19:57:33Z'? Всегда есть 2 знака, которые нужно удалить, и сначала нужно заменить на пробел, 2-й в строке и заменить на ничто. Он действительно вложенный, и если есть шанс его оптимизировать, было бы здорово.

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

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

1 Ответ

0 голосов
/ 29 октября 2018

Нам все еще нужно использовать функции two regexp_replace, потому что мы не заменяем все алфавиты некоторым значением замены .

(или)

Используя функции from_unixtime и unix_timestamp, мы можем удалить T, Z из строкового значения.

Ex:

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, подстрока , которые позволяют достичь того же результата.

...