我正在尝试更改数据类型的类型(在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')
答案 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);
但是,如果更简单的变体不起作用,我只会使用这样的内容。