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)
Другие вопросы по тегам