我的数据库有一些困难。 我已经从多个Excel文件上传了数据,每个文件都有特定的日期格式。有时DD / MM / YYYY,有时YYYY / MM / DD列是字符变化的。 我想将它们设为YYYY / MM / DD。
答案 0 :(得分:1)
一个简单的解决方案:
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);
在文档中详细了解Data Type Formatting Functions和POSIX Regular Expressions。