如何正确编写一条将数据类型从varchar更改为date并使用原始值设置该字段的新值的SQL语句?

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

我不太喜欢数据库,我有以下问题。

我正在使用 PostgreSQL,我遇到以下情况:我有一个名为 striep 的表,其中包含一个名为 periodo_da 的字段,它是 6 个字符的 varchar,只能包含以下数据:202001202101202201 其中前 4 位数字代表年份,后两位数字代表月份(Jenuary)。

我必须实现具有以下行为的 SQL 代码:

  1. periodo_da 从 varchar 更改为日期类型。
  2. 作为值设置今年一月的第一天。

我试过这样做:

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

怎么了?我错过了什么?我怎样才能正确地实现这种行为?

sql database postgresql rdbms
© www.soinside.com 2019 - 2024. All rights reserved.