В снежинке, как преобразовать один формат даты в другой формат. С ГГГГММДД на ГГГГ-МН-ДД

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


person Mohan krishna Bellamkonda    schedule 08.09.2020    source источник
comment
Если столбец z определен как дата в SF, он не должен иметь формат YYYYMMDD. Это определяется как varchar?   -  person Mike Gohl    schedule 08.09.2020
comment
Столбец Z определяется как Число (38,0). Еще один вопрос: каков был бы формат, если столбец определен как дата?   -  person Mohan krishna Bellamkonda    schedule 08.09.2020
comment
Snowflake имеет несколько параметров, которые определяют, какой формат вы видите или какой формат ожидает Snowflake. DATE_OUTPUT_FORMAT и DATE_INPUT_FORMAT. Параметр не имеет ничего общего с тем, как дата хранится внутри.   -  person Mike Gohl    schedule 08.09.2020
comment
В чем разница между To_char (to_date (To_char (z), 'YYYYMMDD'), 'YYYY-MON-DD). а также. to_date (z, 'ГГГГ-МЕС-ДД'). Первая логика работает отлично, а вторая не работает. Почему это. Базовый столбец Z имеет тип данных даты, и для него установлено значение ГГГГММДД.   -  person Mohan krishna Bellamkonda    schedule 08.09.2020
comment
Если z определяется как число, вы получите сообщение об ошибке при попытке to_date (z, 'ГГГГ-МЕС-ДД').   -  person Mike Gohl    schedule 08.09.2020


Ответы (5)


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

TO_CHAR(Z,'YYYY-MON-DD')
person hopeIsTheonlyWeapon    schedule 08.09.2020
comment
Я пробовал это ... но это не сработало. Я попробовал следующее, и это сработало. Я не уверен, в чем разница. To_char (to_date (To_char (z), 'ГГГГММДД'), 'ГГГГ-МЕС-ДД). - person Mohan krishna Bellamkonda; 08.09.2020
comment
какой тип данных для z в таблице? Можете ли вы сделать get_ddl, чтобы узнать это - person hopeIsTheonlyWeapon; 08.09.2020

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

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

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

person Mike Walton    schedule 08.09.2020
comment
В чем разница между To_char (to_date (To_char (z), 'YYYYMMDD'), 'YYYY-MON-DD). а также. to_date (z, 'ГГГГ-МЕС-ДД'). Первая логика работает отлично, а вторая не работает. Почему это. Базовый столбец Z имеет тип данных даты, и для него установлено значение ГГГГММДД. - person Mohan krishna Bellamkonda; 08.09.2020
comment
Не похоже, что столбец z на самом деле является типом данных даты. Можешь подтвердить? - person Mike Walton; 08.09.2020

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

ALTER SESSION SET DATE_OUTPUT_FORMAT = 'ГГГГ-МН-ДД';

выберите to_date (to_char (z), 'ГГГГММДД');

person Mike Gohl    schedule 08.09.2020

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

  • В вопросе указано, что столбец 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
person Felipe Hoffa    schedule 09.09.2020

Я не ожидаю, что он будет работать лучше, но добавлю его туда. Вы в основном разделяете год, месяц и день и соединяете их вместе в желаемом формате.

set z='20200101';
select to_char((left($z,4) ||'-'|| substr($z,5,2) ||'-'|| right($z,2))::date,'YYYY-MON-DD')
person Rajat    schedule 09.09.2020