CURRENT_TIMESTAMP () точность? - PullRequest
       5

CURRENT_TIMESTAMP () точность?

0 голосов
/ 08 апреля 2020

В документации говорится, что мы можем указать точность от 0 (секунды) до 9 (наносекунды)

Однако, кажется, по умолчанию используется значение в миллисекундах, что бы я ни делал ...

SELECT 
  CURRENT_TIMESTAMP() AS CT0a
  ,to_varchar(CT0a, 'yyyy-mm-dd hh24:mi:ss.FF9') AS CT0b
  ,CURRENT_TIMESTAMP(1) AS CT1a
  ,to_varchar(CT1a, 'yyyy-mm-dd hh24:mi:ss.FF9') AS CT1b
  ,CURRENT_TIMESTAMP(9) AS CT9a
  ,to_varchar(CT9a, 'yyyy-mm-dd hh24:mi:ss.FF9') AS CT9b
  ;

Кажется возвращать то же самое, если я отображаю его с достаточным количеством десятичных знаков, что неизменно составляет миллисекунды ...

CT0A 2020-04-08 23:37:56.667 +0000  
CT0B 2020-04-08 23:37:56.667000000  
CT1A 2020-04-08 23:37:56.600 +0000  
CT1B 2020-04-08 23:37:56.667000000  
CT9A 2020-04-08 23:37:56.667 +0000  
CT9B 2020-04-08 23:37:56.667000000

CT0a, CT1a и CT2a отображаются с соответствующим количеством десятичных знаков, но CT0b, CT1b и CT9b все отображать то же самое время с точностью до 3 десятичных знаков ...

Я что-то упускаю из виду?

1 Ответ

0 голосов
/ 08 апреля 2020

Хотя тип данных временной метки Snowflake поддерживает точность до 9 цифр, функция current_timestamp - нет. Все, что находится за пределами миллисекунд, будет ложной точностью для часов, поэтому об этом не сообщается.

https://docs.snowflake.com/en/sql-reference/functions/current_timestamp.html

Допустимые значения находятся в диапазоне от 0 до 9. Однако большинство платформ не поддерживают истинную точность наносекунд; точность, которую вы получаете, может быть меньше, чем указанная вами точность. На практике точность обычно составляет не более миллисекунд (3 цифры).

Если вы не укажете формат вывода, Snowflake будет отображаться с тремя десятичными разрядами в течение нескольких секунд, даже если внутренняя точность равна выше:

select to_timestamp(15863566077839811234, 9); -- Seconds has 9 digit precision, but displays 3
select to_varchar(to_timestamp(15863566077839811234, 9), 'yyyy-mm-dd hh24:mi:ss.FF9'); -- Displays all 9 digit precision
...