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

PostgreSQL按月统计工作日周末数量 解决WEEKDAY函数不存在报错

问题解答

1. 关于WEEKDAY函数的疑问

PostgreSQL 没有内置的 WEEKDAY 函数,这个函数是 MySQL 专属的语法,因此会触发函数不存在的报错。

2. 替代实现方案

MySQL的WEEKDAY函数规则为:周一返回0、周二返回1……周五返回4、周六返回5、周日返回6。在PostgreSQL中可以用EXTRACT(ISODOW FROM 日期)实现等价逻辑,该语法的规则为:周一返回1、周二返回2……周五返回5、周六返回6、周日返回7,仅需要简单调整判断条件即可匹配原有逻辑。
此外你用到的MONTH()函数同样是MySQL专属语法,PostgreSQL中需要用EXTRACT(MONTH FROM 日期)替代,IF()函数可以用标准SQL的CASE WHEN或者PostgreSQL专属的FILTER语法实现。

改写后的通用兼容查询语句

SELECT 
  fname, 
  EXTRACT(MONTH FROM eventDate) AS event_month,
  SUM(CASE WHEN EXTRACT(ISODOW FROM eventDate) < 6 THEN 1 ELSE 0 END) AS WeekdayCount,
  SUM(CASE WHEN EXTRACT(ISODOW FROM eventDate) >= 6 THEN 1 ELSE 0 END) AS WeekendCount
FROM eventcal AS e
LEFT JOIN users AS u ON e.primary = u.username
GROUP BY fname, EXTRACT(MONTH FROM eventDate);

更简洁的PostgreSQL专属写法(使用FILTER语法)

SELECT 
  fname, 
  EXTRACT(MONTH FROM eventDate) AS event_month,
  COUNT(*) FILTER (WHERE EXTRACT(ISODOW FROM eventDate) < 6) AS WeekdayCount,
  COUNT(*) FILTER (WHERE EXTRACT(ISODOW FROM eventDate) >= 6) AS WeekendCount
FROM eventcal AS e
LEFT JOIN users AS u ON e.primary = u.username
GROUP BY fname, EXTRACT(MONTH FROM eventDate);

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:03