SQL中的IF/ELSE条件

Wil*_*50n 1 sql oracle

我正在尝试为PLSQL执行IF/ELSE语句,但我不确定我是否正确地执行此操作,因为它始终存在错误:IF上缺少右括号(TO_NUMBER(SUBSTR(ATTR_VALUE,6,2)) != TO_NUMBER(SUBSTR(ATTR_VALUE,1,2)))那么 括号似乎与我平衡.

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
Run Code Online (Sandbox Code Playgroud)

请帮助我解决这个问题.

Tar*_*ryn 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
Run Code Online (Sandbox Code Playgroud)