PostgreSQL从日期字段提取年月日的SQL语法报错解决方案
Postgres 从日期列拆分年/月/日列的解决方案
报错根因
你遇到的语法错误来自两处核心问题:
SELECT子句中,id_col和后续的extract函数之间缺失逗号分隔,数据库解析到extract位置时无法识别语法,直接抛出42601语法错误。- 提取月份的逻辑写错了引用字段:你需要从日期字段
date_col提取月份,却误填了数字ID字段id_col,就算修正逗号后这行也会触发类型不匹配错误。 - 原SQL未覆盖你需要的「提取日期值」的需求。
可直接运行的正确SQL
SELECT date_col, id_col, EXTRACT(YEAR FROM date_col) AS ano, EXTRACT(MONTH FROM date_col) AS mes, EXTRACT(DAY FROM date_col) AS dia FROM MY_TABLE;
可选优化
EXTRACT函数默认返回浮点数类型,如果你需要整数类型的年/月/日值,可以加类型强转,写法如下:
SELECT date_col, id_col, EXTRACT(YEAR FROM date_col)::INT AS ano, EXTRACT(MONTH FROM date_col)::INT AS mes, EXTRACT(DAY FROM date_col)::INT AS dia FROM MY_TABLE;
针对你提供的样例数据,查询返回的前两行结果参考:
| date_col | id_col | ano | mes | dia |
|---|---|---|---|---|
| 2017-12-28 | 892800126 | 2017 | 12 | 28 |
| 2018-01-03 | 892814475 | 2018 | 1 | 3 |
内容的提问来源于stack exchange,提问作者Bruhlickd
相关产品推荐
相关产品推荐

