2014-12-03 127 views
0

我越來越缺少右括號下面的Oracle SQL缺少右括號

SELECT COUNT(*) FROM OAS_HRMS_LEAVE_DETAIL WHERE(((trunc(TO_DATE('12/10/2014','mm /dd/yyyy')) BETWEEN trunc(LEAVE_FROM_DATE) AND trunc(LEAVE_TO_DATE))OR(trunc(TO_DATE('12/11 /2014','mm/dd/yyyy')) BETWEEN(trunc(LEAVE_FROM_DATE) AND trunc(LEAVE_TO_DATE)))) AND (EMPLOYEE_NO='US/Z/054' AND APPROVAL_STATUS IN ('Active','Approved'))) 

回答

0

嘗試圍繞第2 TRUNC(leave_from_date)和TRUNC(leave_to_date)去除括號

SELECT Count(*) 
FROM oas_hrms_leave_detail 
WHERE (
(
    (Trunc(To_date('12/10/2014','mm /dd/yyyy')) BETWEEN Trunc(leave_from_date) AND Trunc(leave_to_date)) 
    OR 
    (Trunc(To_date('12/11 /2014','mm/dd/yyyy')) BETWEEN Trunc(leave_from_date) AND Trunc(leave_to_date)) 
) 
    AND(employee_no='US/Z/054' AND approval_status IN ('Active','Approved'))) 
0

很難閱讀......和真的不知道你正在做什麼樣的條件。

SELECT COUNT(*) 
FROM OAS_HRMS_LEAVE_DETAIL 
WHERE(((trunc(TO_DATE('12/10/2014','mm/dd/yyyy')) 
BETWEEN trunc(LEAVE_FROM_DATE)AND trunc(LEAVE_TO_DATE)) 
OR (trunc(TO_DATE('12/11 /2014','mm/dd/yyyy')) 
BETWEEN(trunc(LEAVE_FROM_DATE) AND trunc(LEAVE_TO_DATE)))//)// <- one extra added here? 
AND(EMPLOYEE_NO='US/Z/054' AND APPROVAL_STATUS IN ('Active','Approved'))) 
0

無法看到任何缺少右括號的問題,但你有括號的很多!我會盡量減少他們的使用 - 你確實需要他們在有AND和OR的地方,而不是到處都有。

下面是一個簡化版本:

SELECT COUNT(*) FROM OAS_HRMS_LEAVE_DETAIL 
WHERE 
( DATE '2014-12-10' BETWEEN trunc(LEAVE_FROM_DATE) AND trunc(LEAVE_TO_DATE) 
    OR DATE '2014-12-11' BETWEEN trunc(LEAVE_FROM_DATE) AND trunc(LEAVE_TO_DATE) 
) 
AND EMPLOYEE_NO='US/Z/054' 
AND APPROVAL_STATUS IN ('Active','Approved') 

注:

  1. 日期文字例如使用DATE「情節中字」,而不是一個TO_DATE函數調用
  2. 無需TRUNC()字面日期

另外,你真的需要截斷LEAVE_FROM_DATE和LEAVE_TO_DATE?如果這些僅僅是日期(沒有時間部分),那麼它們應該被驗證(例如檢查限制),然後您可以刪除那些TRUNC:

SELECT COUNT(*) FROM OAS_HRMS_LEAVE_DETAIL 
WHERE 
( DATE '2014-12-10' BETWEEN LEAVE_FROM_DATE AND LEAVE_TO_DATE 
    OR DATE '2014-12-11' BETWEEN LEAVE_FROM_DATE AND LEAVE_TO_DATE 
) 
AND EMPLOYEE_NO='US/Z/054' 
AND APPROVAL_STATUS IN ('Active','Approved')