#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