Ищите решение, чтобы поменять местами формат даты DMY на YMD - PullRequest
0 голосов
/ 06 января 2019

У меня есть некоторые трудности с моей базой данных. Я загрузил данные из нескольких файлов Excel, каждый файл имеет специальный формат даты. некоторое время ДД / ММ / ГГГГ и некоторое время ГГГГ / ММ / ДД столбец является символьной переменной. я хочу сделать их ГГГГ / ММ / ДД.

1 Ответ

0 голосов
/ 06 января 2019

Простое решение:

select regexp_replace('05/01/2019', '(\d\d)/(\d\d)/(\d\d\d\d)', '\3/\2/\1')

 regexp_replace 
----------------
 2019/01/05
(1 row)

Вы можете обновить таблицу с помощью

update my_table
set date_column = regexp_replace(date_column, '(\d\d)/(\d\d)/(\d\d\d\d)', '\3/\2/\1')

Тем не менее, вам следует хранить даты в столбце типа date.. Используйте функцию для преобразования разноформатированных текстов в даты:

create or replace function iso_date(text)
returns date language sql immutable as $$
    select case
        when $1 like '__/__/____' then to_date($1, 'DD/MM/YYYY')
        when $1 like '____/__/__' then to_date($1, 'YYYY/MM/DD')
    end
$$

Выше приведен пример, вы можете изменить функцию, если у вас есть больше разных форматов. Теперь вы можете изменить тип столбца следующим образом:

alter table my_table alter date_column type date using iso_date(date_column);

Подробнее о Функции форматирования типов данных и Регулярные выражения POSIX в документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...