从PostgreSQL中的不同格式提取日期

时间:2019-11-25 04:14:24

标签: postgresql

我正在尝试更改数据类型的类型(在PostgreSQL中从VARCHAR更改为DATE)。

通常,以下代码可以工作,但是如您所见,cc_active_date有两种日期类型。在这种情况下,是否有一种方法可以模拟尝试捕获,因此如果强制转换DD/MM/YYYY会花费YYYY-MM-DD hh:mm:ss

alter table credit_card.hsbc alter column cc_active_date type date
using to_date(cc_active_date, 'DD/MM/YYYY')

enter image description here

1 个答案:

答案 0 :(得分:2)

DATE在识别日期格式方面非常灵活,并且已经掌握了您的格式。使用SET datestyle,您可以对其进行控制,从而无需区分大小写:

SET datestyle TO ISO, DMY;
ALTER TABLE credit_card.hsbc ALTER COLUMN cc_active_date type DATE
USING cc_active_date::DATE;

不支持格式的替代方法是if条件:

ALTER TABLE credit_card.hsbc ALTER COLUMN cc_active_date type DATE
USING TO_DATE(cc_active_date, CASE WHEN cc_active_date ~ '^\d{2}/\d{2}/\d{4}$' THEN 
    'DD/MM/YYYY' ELSE 'YYYY-MM-DD hh:mm:ss' END);

但是,如果更简单的变体不起作用,我只会使用这样的内容。