2013-01-11 2 views
1

PLSQL에 대해 IF/ELSE 문을 수행하려고하는데 오류가 있으므로 올바른 방법을 사용하고 있는지 확실하지 않습니다. 오른쪽 괄호가 없습니다. IF (TO_NUMBER (SUBSTR (ATTR_VALUE, 6, 2))! = TO_NUMBER (SUBSTR (ATTR_VALUE, 1, 2))) 그러나 괄호는 나에게 균형을 이루고있는 것처럼 보입니다.SQL의 IF/ELSE 조건

SELECT * 
FROM 
(
IF (TO_NUMBER(SUBSTR(ATTR_VALUE, 6, 2)) != TO_NUMBER(SUBSTR(ATTR_VALUE, 1, 2))) THEN 
    SELECT ID, DATE, ATTR_VALUE, (TO_NUMBER(SUBSTR(ATTR_VALUE, 6, 4))-TO_NUMBER(SUBSTR(ATTR_VALUE, 1, 4))-48) DIFF 
ELSE 
    SELECT ID, DATE, ATTR_VALUE, (TO_NUMBER(SUBSTR(ATTR_VALUE, 6, 4))-TO_NUMBER(SUBSTR(ATTR_VALUE, 1, 4))) DIFF 
END IF 
FROM Table A 
ORDER BY TIME 
) 
WHERE DIFF>26 

이 문제에 대해 친절히 도와주세요.

+0

귀하의 예는 일반 SQL이를 , 거기에 PL/SQL (저장 프로 시저)가 관련된 –

+0

if 진술은 pl/sql에서만 당신이 제안하거나 대문자를 해독 할 필요가있다. – glh

답변

5

당신은 결과를 얻으려면 CASE 문을 사용 할 수 있어야한다 :

SELECT * 
FROM 
(
    SELECT ID, 
    DATE, 
    ATTR_VALUE, 
    CASE 
     WHEN TO_NUMBER(SUBSTR(ATTR_VALUE, 6, 2)) != TO_NUMBER(SUBSTR(ATTR_VALUE, 1, 2)) 
     THEN (TO_NUMBER(SUBSTR(ATTR_VALUE, 6, 4))-TO_NUMBER(SUBSTR(ATTR_VALUE, 1, 4))-48) 
     ELSE (TO_NUMBER(SUBSTR(ATTR_VALUE, 6, 4))-TO_NUMBER(SUBSTR(ATTR_VALUE, 1, 4))) 
    END DIFF 
    FROM Table A 
    ORDER BY TIME 
) 
WHERE DIFF>26 
+0

도움 주셔서 대단히 감사합니다! – Wil50n

0
다음과 같이 당신은 줄에 뭔가에 쿼리를 수정할 수 있습니다

,

SELECT * 
    FROM (SELECT ID, 
       DATE, 
       ATTR_VALUE, 
       decode(TO_NUMBER(SUBSTR(ATTR_VALUE, 6, 2)), 
         TO_NUMBER(SUBSTR(ATTR_VALUE, 1, 2)), 
         TO_NUMBER(SUBSTR(ATTR_VALUE, 6, 4)) - 
         TO_NUMBER(SUBSTR(ATTR_VALUE, 1, 4)), 
         TO_NUMBER(SUBSTR(ATTR_VALUE, 6, 4)) - 
         TO_NUMBER(SUBSTR(ATTR_VALUE, 1, 4))) DIFF 
      FROM A) 
WHERE diff > 26 
+0

도움 주셔서 대단히 감사합니다! – Wil50n

+0

당신은 환영합니다! – Orangecrush