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

ORA-00936缺失表达式错误:Ruby执行Oracle设备统计查询报错排查

问题定位

你的SQL报错核心原因是使用了Oracle不支持的date()函数,Oracle语法中没有内置的date()函数来提取时间字段的日期部分,SQL解析器无法识别该函数调用,因此抛出ORA-00936: missing expression错误。

修复方法

你当前的需求是提取request_time的日期部分(剔除时分秒),在Oracle中对应的标准函数是TRUNC(),你需要做两处修改:

  • 将SELECT子句中的date(request_time) AS date_request_time替换为TRUNC(request_time) AS date_request_time
  • 将GROUP BY子句中的date(request_time)同步替换为TRUNC(request_time)

修改后的完整SQL如下:

SELECT
   COUNT(*) AS count_all,
   TRUNC(request_time) AS date_request_time,
   "REQUESTS"."DEVICE_ID" AS requests_device_id 
FROM
   "REQUESTS" 
WHERE
   customer_id = 1 
   AND request_method != 'OPTIONS' 
   AND device_id IS NOT NULL 
   AND request_time BETWEEN '2021-10-27 00:00:00' AND '2021-11-03 23:59:59.000999'
GROUP BY
   TRUNC(request_time),
   "REQUESTS"."DEVICE_ID"

额外优化说明:原WHERE条件中request_time的范围判断重复写了两次,上述修改已将冗余条件合并,不影响逻辑的同时提升执行效率。

如果你的SQL是通过Ruby的ActiveRecord自动生成的,需要确认你使用的Oracle适配器配置正确,避免后续自动生成的语句再次误用date()函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:06:07