Sql в Snowflake меняет дату с 106 (13-APR-2020) на 105 (13-04-2020) - PullRequest
0 голосов
/ 09 июля 2020

Итак, у меня есть несколько полей даты в таблице, которые отформатированы как (DD-MON-YYYY), и мне нужно преобразовать их в (DD-MM-YYYY). Само поле уже имеет VARCHAR. В Snowflake, как мне это изменить. Вот что я сделал до сих пор.

select to_date(end_date, 'dd-mm-yyyy') from

error: Can't parse '31-JAN-2020' as date with format 'dd-mm-yyyy'

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Простой способ приблизиться к этому - преобразовать вашу строку в дату, а затем обратно в строку в новом формате, пример:

--create an example table to test
CREATE TEMPORARY TABLE xyz (my_dt_string VARCHAR(100));

--insert a couple records
INSERT INTO xyz VALUES ('31-JAN-2020'), ('13-APR-2020');

--test a conversion, from string to date back to string
SELECT  my_dt_string, 
        TO_CHAR(TO_DATE(my_dt_string, 'dd-mon-yyyy'), 'dd-mm-yyyy') converted 
FROM    xyz;

--looks good? run the following
UPDATE xyz 
SET my_dt_string = TO_CHAR(TO_DATE(my_dt_string, 'dd-mon-yyyy'), 'dd-mm-yyyy');

--take a look
select * from xyz;

Надеюсь, это поможет .. Богатый

1 голос
/ 09 июля 2020

Функция to_date() предоставляет вам возможность преобразовать поле VARCHAR в поле DATE, а не указывать формат даты. Итак, вы хотите запустить это:

SELECT TO_DATE(end_date, 'DD-MON-YYYY');

Это выведет дату как дату. Если вы хотите указать, как вы видите дату, у вас есть 2 варианта:

Во-первых, преобразовать его обратно в VARCHAR в предпочтительном формате:

SELECT TO_VARCHAR(TO_DATE(end_date, 'DD-MON-YYYY'),'DD-MM-YYYY');

Во-вторых, измените параметр сеанса DATE_OUTPUT_FORMAT в формате, в котором вы хотите видеть отображаемые даты:

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

Это также можно сделать для пользователя, а не для сеанса, используя:

ALTER USER SET DATE_OUTPUT_FORMAT = 'DD-MM-YYYY';
...