Postgres 无效日期格式

问题描述 投票:0回答:2

下面是我数据库中某列的一些日期示例。目前,这些日期值存储在 varchar 中,我计划将这些值设置为另一个表中的时间戳。

如何设置默认规则将所有无效日期格式转换为 NULL 值或某种“00/00/0000 00:00:00”格式?

pickup_time 

01/01/2016 07:35:00 
00:00:00
31/12/2015
07:35:00 

期望:

pickup_time 

01/01/2016 07:35:00 
NULL
31/12/2015 00:00:00
00/00/0000 07:35:00 
postgresql datetime
2个回答
2
投票

好的,这是基本思想,因此您需要为每个要处理的情况设置一个带有正则表达式的 if/else(或用于找出字符串模式的东西)。

create or replace function my_super_converter_to_timestamp(arg text)
returns timestamp language plpgsql
as $$
begin
    begin
        -- if(arg like '00:00:00') do something ...
        return arg::timestamp;
    exception when others then
        return null;
    end;
end $$;

0
投票

在 pgAdmin 控制台中,我使用此命令结合一个函数将 varchar 列转换为 timestamptznull(如果转换不成功):

create or replace function converter_to_timestamp(arg text)
returns timestamptz
as $$
    begin
        return arg::timestamptz;
    exception when others then
        return null;
    end;
$$ language plpgsql;

alter table client 
  alter column birthday type timestamptz 
   using converter_to_timestamp(birthday);
© www.soinside.com 2019 - 2024. All rights reserved.