MySQL转PostgreSQL遇PG::Error:hour函数不存在问题求助
解决PostgreSQL中
hour(timestamp without time zone)函数不存在的问题 PostgreSQL没有MySQL风格的HOUR()函数,要提取时间戳中的小时部分,可使用以下两种替代方法:
1. 用EXTRACT(HOUR FROM ...)(SQL标准语法,兼容性更好)
修改后的查询语句:
SELECT volt as volt1, max(current) as current1, max(total_load) as total_load, EXTRACT(HOUR FROM created_at) as hourly FROM "rms_dc_power_history" WHERE "rms_id" = 2 AND "created_at"::date = '2022-09-03' -- 注意给日期加单引号,避免被解析为数值运算 GROUP BY EXTRACT(HOUR FROM created_at)
2. 用DATE_PART('hour', ...)(PostgreSQL特有函数)
功能与EXTRACT一致,语句如下:
SELECT volt as volt1, max(current) as current1, max(total_load) as total_load, DATE_PART('hour', created_at) as hourly FROM "rms_dc_power_history" WHERE "rms_id" = 2 AND "created_at"::date = '2022-09-03' GROUP BY DATE_PART('hour', created_at)
额外优化提示
- 原查询中
created_at::time > 00:00 and created_at::time <= 24:00是冗余条件,created_at::date = '2022-09-03'已经限定时间在当天范围内,可直接删除以简化逻辑。 - 日期值必须加单引号,否则PostgreSQL会将
2022-09-03解析为2022 - 9 - 3的数值运算,导致条件失效。
内容的提问来源于stack exchange,提问作者Nur karim
相关产品推荐
相关产品推荐

