我不太喜欢数据库,我有以下问题。
我正在使用 PostgreSQL,我遇到以下情况:我有一个名为 striep 的表,其中包含一个名为 periodo_da 的字段,它是 6 个字符的 varchar,只能包含以下数据:202001 或 202101 或202201 其中前 4 位数字代表年份,后两位数字代表月份(Jenuary)。
我必须实现具有以下行为的 SQL 代码:
我试过这样做:
ALTER TABLE striep
ALTER COLUMN periodo_da TYPE DATE USING to_date(periodo_da, 'YYYYMMDD');
UPDATE striep
SET periodo_da = CASE
WHEN periodo_da = '202001' THEN '2020-01-01'::date
WHEN periodo_da = '202101' THEN '2021-01-01'::date
WHEN periodo_da = '202301' THEN '2022-01-01'::date
ELSE NULL
END;
但是我收到以下错误消息:
ERROR: date/time field value out of range: "202001"
LINE 6: WHEN periodo_da = '202001' THEN '2020-01...
^
HINT: Perhaps you need a different "datestyle" setting.
SQL state: 22008
Character: 169
怎么了?我错过了什么?我怎样才能正确地实现这种行为?