Как вставить дату по юлианскому календарю в поле типа данных даты снежинки

#snowflake-cloud-data-platform #julian-date

#snowflake-cloud-data-platform #дата по юлианскому календарю

Вопрос:

Мои данные представлены в формате ниже (юлианский):

2020102
2019134

Тип данных в снежинке — это дата для этого поля. Как мне вставить это в снежинку, используя команду копирования.

Я думаю ниже, но я пока не смог найти формат даты для Julian. Скопируйте в таблицу*col1,col2) (выберите $1, TO_DATE($ 2, ‘format’) из @%Table

Ответ №1:

В настоящее время Snowflake не поддерживает формат даты по юлианскому календарю, но вы можете использовать выражение для преобразования его в дату. КОПИРОВАНИЕ пока не поддерживает все функции, но вы можете сделать это с помощью этапа ВСТАВКА ВЫБОР из. Вот простой пример:

 COPY INTO @~/test
FROM
  (SELECT $1 FROM
   VALUES (2020102),(2019134))
;


CREATE OR REPLACE TABLE t1 (juldate int, caldate date);


INSERT INTO t1
SELECT $1,
       (left($1, 4)||'-01-01')::date   right($1, 3)::integer - 1
FROM @~/test;


SELECT *
FROM t1;

JULDATE CALDATE
2020102 2020-04-11
2019134 2019-05-14
  

Ответ №2:

В Snowflake нет встроенного преобразователя даты по юлианскому календарю, и я не думаю, что предоставленные вами значения на самом деле являются датами по юлианскому календарю, поскольку формат обычно не содержит 4-значный год, я не думаю. В любом случае, вам нужно будет выполнить некоторый синтаксический анализ и добавить дату. Что-то подобное может сработать, хотя я не уверен на 100%, какой ожидаемый результат должен подтвердить:

 with x as (
    SELECT '2020102' as julian
  )
SELECT DATEADD(days,SUBSTRING(julian,5,3)::number-1,(SUBSTRING(julian,1,4)||'-01-01')::DATE)
FROM x;
  

Кажется, это работает, но опять же, не уверен на 100%.