Простое решение:
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 в документации.