【问题标题】:ORA-00907 "missing right parenthesis" extract month and yearORA-00907“缺少右括号”提取月份和年份
【发布时间】:2025-12-02 08:10:01
【问题描述】:

今天的一切都过得很糟糕。我正在尝试获取月、年的列表,然后平均每个月的订单总数。我得到 ORA-00907“缺少右括号”,我不知道为什么。同样,我对此很陌生,但我从https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions050.htm 引用的代码。提前致谢。

SELECT EXTRACT (MONTH, YEAR FROM ORDERDATE) "DATE"
AVG (ORDERDATE) "NO. OF ORDERS"
FROM ORDERINFO
GROUP BY EXTRACT (MONTH, YEAR FROM ORDERDATE)
ORDER BY "MONTH" ASC; 

【问题讨论】:

  • 哪一个是你的table orderdate or orderinfo应该有一个
  • 向我们展示您的表格和所需的输出

标签: sql oracle


【解决方案1】:

您引用的文档表明,只有一个日期部分说明符可以是提取函数。

例如,extract(month from orderdate)extract(year from orderdate)

我猜你真的想截断 orderdate。见https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions201.htm

SELECT trunc(orderdate, 'MONTH') AS "date"

【讨论】:

  • 使用 TRUNC 代替 TRUNCATE
  • 好消息@WernfriedDomscheit。我相应地编辑了我的答案。
【解决方案2】:

要么:

select
  extract(month from orderdate) as year,
  extract(year from orderdate) as month,
  ...
from ...
group by extract(month from orderdate), extract(year from orderdate)

或:

select
  to_char(orderdate, 'YYYY-MM') as year_month,
  ...
from ...
group by to_char(orderdate, 'YYYY-MM')

【讨论】:

    【解决方案3】:

    这将起作用:

    select extract(month from orderdate) "MONTH",
           extract(year from orderdate) "YEAR",
    from orderdate
    group by extract(month from orderdate)
    order by extract(month from orderdate) asc;
    

    【讨论】:

    • 1.您的帖子添加到answer Bohemian posted yesterday 的信息是什么。 2、为什么你认为月数的平均值是一个有意义的数字,尤其是为什么你认为是订单数?
    • @miracle173 这就是我要求表格和所需输出的原因