Postgres(PGadmin)修改列类型从date转integer报错如何解决
问题原因
PostgreSQL未提供date类型到integer类型的默认强制转换规则,你直接使用year::integer是尝试把完整日期值(如2023-10-01)直接转为整数,不符合转换逻辑,因此触发报错。
解决方案
你需要在USING子句中先从date类型的year字段中提取年份数值,再进行类型转换,两种常用写法均可生效:
写法1:使用EXTRACT函数提取年份
ALTER TABLE "Event" ALTER COLUMN year TYPE INT USING EXTRACT(YEAR FROM year)::integer;
写法2:先转年份字符串再转整数
如果需要兼容特殊格式的日期存储,可先将日期转为四位数年份字符串再转整数:
ALTER TABLE "Event" ALTER COLUMN year TYPE INT USING to_char(year, 'YYYY')::integer;
注意:因为你创建表时使用了带双引号的大写表名
"Event",PostgreSQL会对表名做大小写敏感匹配,执行修改语句时必须保留双引号,否则会提示表不存在。
验证修改
修改完成后可执行查询确认字段类型和数值是否符合预期:
-- 查看字段类型 SELECT data_type FROM information_schema.columns WHERE table_name = 'Event' AND column_name = 'year'; -- 抽查年份数值 SELECT year FROM "Event" LIMIT 10;
内容的提问来源于stack exchange,提问作者P.D.R
相关产品推荐
相关产品推荐

