Как конвертировать UNIX дней эпохи в ДАТУ в Снежинке? - PullRequest
1 голос
/ 11 марта 2020

У меня есть некоторые значения, которые соответствуют количеству дней с начала эпохи, и я хочу сохранить их в столбце DATE в Snowflake.

Пример: 33057

Соответствует воскресению, 4 июля 2060 г.

Было бы очень полезно, если бы кто-то мог указать мне на правильную документацию Snowflake (если она имеется в наличии) ) для таких

Ответы [ 2 ]

3 голосов
/ 11 марта 2020

Я думаю, что это будет работать:

select dateadd(day, <your number> - 33057, '2060-07-04')

Итак, для указанного c преобразования "33057" это будет:

select dateadd(day, 33057 - 33057, '2060-07-04')

Но это должно работать для любое целое число.

2 голосов
/ 11 марта 2020

TO_TIMESTAMP_x (numeric_expr) - это то, что вы ищете. И если вам нужна только часть даты, я бы затем обрезал через ::DATE

numeric_expr Количество секунд (если масштаб = 0 или отсутствует) или доли секунды (например, миллисекунды или наносекунды) с начала эпохи Unix (1970-01-01 00:00:00 UT C). Если вводится нецелое десятичное выражение, масштаб результата наследуется.

если у вас есть миллисекунды, вы можете использовать форму TO_TIMESTAMP_x(numeric_expr, scale)

select to_timestamp(12334567) as t_from_s
  ,to_timestamp(12334567000, 3) as t_from_ms;

, которая дает

T_FROM_S                   T_FROM_MS
1970-05-23 18:16:07.000    1970-05-23 18:16:07.000

Мы используем вариант _NTZ для всех наших применений, так как у нас есть все данные в UT C с серверов.

...