寻找将日期格式DMY转换为YMD的解决方案

时间:2019-01-06 13:57:24

标签: postgresql

我的数据库有一些困难。 我已经从多个Excel文件上传了数据,每个文件都有特定的日期格式。有时DD / MM / YYYY,有时YYYY / MM / DD列是字符变化的。 我想将它们设为YYYY / MM / DD。

1 个答案:

答案 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 FunctionsPOSIX Regular Expressions