netezza - форматирование временной метки до 1/100 с / 1/10 с секунды
Я мог бы сделать форматирование метки времени в секундах следующим образом.
to_char('2017-02-20 08:22:44.166'::timestamp, 'YYYY-MM-DD HH24:MI:SS') --> 2017-02-20 08:22:44
Мне нужно отформатировать указанную метку времени в 100 и 10 секунд.
-> 2017-02-20 08:22:44.17
(отформатировано до 1/100 секунды)
-> 2017-02-20 08:22:44.2
(форматируется до 1/10 секунды)
Я попробовал способ postgres, как показано ниже, но это дает ошибку в платформе Netezza, с которой я работаю
select '2017-02-20 08:22:44.166'::timestamp(2), '2017-02-20 08:22:44.166'::timestamp(1);
ERROR [42000] ERROR: 'select '2017-02-20 08:22:44.166'::timestamp(2), '2017-02-20 08:22:44.166'::timestamp(1) LIMIT 1000'
error ^ found "(" (at char 44) expecting a keyword
1 ответ
Решение
Это не красиво, но работает на PostgreSQL, и я считаю, что это будет работать на Netezza. (К сожалению, у меня больше нет доступа к коробке Netezza, поэтому я просто полагаюсь на документацию):
select
'2017-02-20 08:22:44.166'::timestamp,
to_char('2017-02-20 08:22:44.166'::timestamp, 'YYYY-MM-DD HH24:MI:SS.') ||
round(to_char('2017-02-20 08:22:44.166'::timestamp, 'MS')::float / 10) as hundredths,
to_char('2017-02-20 08:22:44.166'::timestamp, 'YYYY-MM-DD HH24:MI:SS.') ||
round(to_char('2017-02-20 08:22:44.166'::timestamp, 'MS')::float / 100) as tenths;
timestamp | hundredths | tenths
-------------------------+------------------------+-----------------------
2017-02-20 08:22:44.166 | 2017-02-20 08:22:44.17 | 2017-02-20 08:22:44.2
(1 row)