ORA-00936: 执行查询时缺少表达式

Pro*_*mer 1 sql oracle

我正在使用 Ruby 与数据库通信,并且有一个统计页面显示设备的统计信息。不幸的是,当执行选择查询以显示页面时,我收到以下错误:

错误 -- : StatementInvalid: Java::JavaSql::SQLSyntaxErrorException: ORA-00936: 缺少表达式

SELECT
   COUNT(*) AS count_all,
   date(request_time) AS date_request_time,
   "REQUESTS"."DEVICE_ID" AS requests_device_id 
FROM
   "REQUESTS" 
WHERE
   (
      customer_id = 1 
      AND request_method != 'OPTIONS' 
      AND request_time BETWEEN '2021-10-27 00:00:00' AND '2021-11-03 23:59:59.000999'
   )
   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
   date(request_time),
   "REQUESTS"."DEVICE_ID"
Run Code Online (Sandbox Code Playgroud)

缺少什么表情?我似乎错过了什么。

The*_*ler 5

该查询有两个问题:

  • date()用。。。来代替trunc()
  • 要使用时间戳文字,请使用to_date()(或timestamp 'literal')。

例如,您的查询可以运行为:

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 request_time BETWEEN to_date('2021-10-27 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
                           AND to_date('2021-11-03 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
   )
   AND 
   (
      device_id IS NOT NULL 
      AND request_time BETWEEN to_date('2021-10-27 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
                           AND to_date('2021-11-03 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
   )
GROUP BY
   trunc(request_time),
   "REQUESTS"."DEVICE_ID"
Run Code Online (Sandbox Code Playgroud)

请参阅db<>fiddle处的运行示例。