显示缺少表达式的SQL查询

时间:2014-08-19 12:06:29

标签: sql oracle

查询在Yseterday 6AM到今天早上6点之间提取数据......

  SELECT 
  lot_id,
  log_time,
  batch_no,
  eqp_id,
  STATION_ID,
  EXTRACTVALUE (META_DATA, '/lot_info/A3') AS A3,
  EXTRACTVALUE (META_DATA, '/lot_info/A3Info') AS A3Info,
  EXTRACTVALUE (
    META_DATA,
    '/lot_info/apc_status_info'
  ) AS apc_status_info 
FROM
  t_dlis_log_history 
WHERE (
    (EQP_ID = 'ALC4360') 
    OR (EQP_ID = 'ALC4361') 
    OR (EQP_ID = 'ALC1360') 
    OR (EQP_ID = 'ALC1361') 
    OR (EQP_ID = 'ALC1362') 
    OR (EQP_ID = 'ALC1363') 
    OR (EQP_ID = 'ALC1364') 
    OR (EQP_ID = 'ALC1365') 
    OR (EQP_ID = 'ALC355') 
    OR (EQP_ID = 'ALC353') 
    OR (EQP_ID = 'ALC4350') 
    OR (EQP_ID = 'ALC354')
  ) 
  AND ((
    log_time >= DATEADD (
      HOUR,
      6,
      CONVERT(VARCHAR (10), GETDATE (), 110)
    ) 
    AND (
      log_time <= DATEADD (
        HOUR,
        6,
        CONVERT(VARCHAR (10), GETDATE () + 1, 110)
      )
    )
  )

显示错误表达错误...

1 个答案:

答案 0 :(得分:2)

您正在将Oracle语法与SQL Server语法混合使用。

EXTRACTVALUE是Oracle函数,但DATEADD是SQL Server函数。根据错误消息,我猜你有Oracle。

在Oracle中,您可以使用它来为日期添加小时数(在这种情况下,您将在昨天00:00和今天00:00添加6小时):

log_time >= trunc(sysdate-1) + 6/24 and log_time <= trunc(sysdate) + 6/24

或者:

log_time between trunc(sysdate-1) + 6/24 and trunc(sysdate) + 6/24

(另外,在您的原始查询中,您最后错过了)