В snowflake, как преобразовать один формат даты в другой формат. Из YYYYMMDD в ГГГГ-ПН-ДД

#date #snowflake-cloud-data-platform #date-format #data-conversion #to-date

#Дата #snowflake-платформа облачных данных #формат даты #преобразование данных #на сегодняшний день

Вопрос:

У меня есть таблица ABC, в которой у меня есть столбец Z типа данных Date. Формат данных — YYYYMMDD. Теперь я хочу преобразовать вышеуказанный формат в формат YYYY-MON-DD. Кто-нибудь может помочь?

Комментарии:

1. Если столбец z определен как дата в SF, он не должен иметь формат YYYYMMDD. Определяется ли это как varchar?

2. Столбец Z определяется как число (38,0). Еще один вопрос : каким будет формат, если столбец определен как дата?

3. У Snowflake есть пара параметров, которые определяют, какой формат вы видите или какой формат ожидает Snowflake. DATE_OUTPUT_FORMAT и DATE_INPUT_FORMAT. Параметр не имеет никакого отношения к тому, как дата хранится внутри.

4. В чем разница между To_char(to_date(To_char(z),’YYYYMMDD’),’YYYY-MON-DD). и. to_date(z, ‘ГГГГ-ПН-ДД’). Первая логика работает отлично, тогда как вторая не работает. Почему это. Базовый столбец Z имеет тип данных date, и предпочтение задано YYYYMMDD.

5. Если z определено как число, вы получите сообщение об ошибке при попытке to_date(z,’ГГГГ-ПН-ДД’).

Ответ №1:

Вы можете использовать to_char

 TO_CHAR(Z,'YYYY-MON-DD')
  

Комментарии:

1. Я пробовал это .. но это не работает . Я попробовал следующее, и это сработало. Я не уверен, в чем разница. To_char(to_date(To_char(z),’YYYYMMDD’),’YYYY-MON-DD).

2. какой тип данных для z в таблице ? Можете ли вы выполнить get_ddl, чтобы выяснить это

Ответ №2:

В зависимости от цели переформатирования, вы можете либо явно преобразовать его в VARCHAR / CHAR и определить формат, либо вы можете изменить формат отображения на тот, который вы хотели бы видеть все даты:

 ALTER SESSION SET DATE_OUTPUT_FORMAT = 'YYYY-MON-DD';
  

Важно понимать, что если данные находятся в поле ДАТЫ, то они сохраняются как дата, а формат даты зависит от ваших предпочтений при просмотре, а не от того, как они хранятся.

Комментарии:

1. В чем разница между To_char(to_date(To_char(z),’YYYYMMDD’),’YYYY-MON-DD). и. to_date(z, ‘ГГГГ-ПН-ДД’). Первая логика работает отлично, тогда как вторая не работает. Почему это. Базовый столбец Z имеет тип данных date, и предпочтение задано YYYYMMDD.

2. Не похоже, что столбец z на самом деле является типом данных даты. Вы можете подтвердить?

Ответ №3:

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

ИЗМЕНИТЬ НАБОР ДАННЫХ СЕАНСА DATE_OUTPUT_FORMAT = ‘ГГГГ-ПН-ДД’;

выберите to_date(to_char( z ), ‘YYYYMMDD’);

Ответ №4:

(добавление этого ответа для обобщения и решения вопроса — поскольку подсказки и ответы разбросаны по комментариям)

  • В вопросе указано, что столбец Z имеет тип DATE , но на самом деле это похоже на NUMBER .
  • Затем, прежде чем преобразовывать число типа 20201017 в дату, сначала вам нужно преобразовать его в STRING .
  • Как только исходное число преобразуется в дату, его можно представить в виде новой строки, отформатированной по желанию.
 WITH data AS (
  SELECT 20201017 AS z
)

SELECT TO_CHAR(TO_DATE(TO_CHAR(z), 'YYYYMMDD'), 'YYYY-MON-DD')
FROM data;

# 2020-Oct-17