You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:45:41