Преобразование строки улья в метку времени с миллисекундами - PullRequest
2 голосов
/ 08 января 2020

У меня есть требование преобразовать указанный формат входной строки и произвести желаемый вывод в метке времени, как показано ниже.

Ввод: 16AUG2001:23:46:32.876086

Требуемый вывод: 2001-08-16 23:46:32.876086

Вывод, который выполняется с помощью следующего кода: 2001-08-17 00:01:08

Запрос:

select '16AUG2001:23:46:32.876086' as row_ins_timestamp,
       from_unixtime(unix_timestamp('16AUG2001:23:46:32.876086',
                     'ddMMMyyyy:HH:mm:ss.SSSSSS')) as row_ins_timestamp
from temp;

Часть в миллисекундах не является быть преобразованным по мере необходимости. Пожалуйста, предложите.

1 Ответ

2 голосов
/ 08 января 2020

Функция unix_timestamp не сохраняет миллисекунды. Преобразовать без миллисекунд, затем объединить с миллисекундной частью:

with your_data as (
select stack(3,
'16AUG2001:23:46:32.876086',
'16AUG2001:23:46:32',
'16AUG2001:23:46:32.123'
) as ts
)

select concat_ws('.',from_unixtime(unix_timestamp(split(ts,'\\.')[0],'ddMMMyyyy:HH:mm:ss')),split(ts,'\\.')[1]) 
  from your_data;

Результат:

2001-08-16 23:46:32.876086
2001-08-16 23:46:32
2001-08-16 23:46:32.123
Time taken: 0.089 seconds, Fetched: 3 row(s)
...