일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- error
- 엑셀
- 톰캣
- 도서
- 에러
- 성능
- 이클립스
- Book
- 마이플랫폼
- Report Designer
- Tomcat
- 데이터베이스
- 자바
- 회계
- 한글
- Excel
- java
- 기타소득
- JavaScript
- DB
- oracle
- MIP
- 함수
- 태그를 입력해 주세요.
- miplatform
- 오라클
- Eclipse
- JEUS
- 튜닝
- 오류
- Today
- Total
어느 가을날의 전환점
ORACLE|Decode 함수 활용 Tips 본문
IF colVal=10 THEN 1
ELSE IF colVal=20 THEN 2
ELSE 3
END IF
SELECT DECODE(colVal, 10, 1, 20, 2, 3)
FROM ...
2. 비교대상이 숫자이면서, 등호가 없는 경우(<, >)
SIGN 함수를 부호를 출력해 주는데..
SIGN(양수)=1, SIGN(음수)=-1, SIGN(0)=0
을 출력하기 때문에 >, <, >=, <=를 표현할 수 있습니다.
IF colVal<10 THEN 1
ELSE IF colVal<20 THEN 2
ELSE IF colVal<30 THEN 3
ELSE 4
문은 다음처럼 표현될 수 있습니다..
SELECT DECODE(SIGN(colVal-10), -1, 1,
DECODE(SIGN(colVal-20), -1, 2,
DECODE(SIGN(colVal-50), -1, 3, 4)
)
)
FROM ....
FLOOR 함수도 사용할 수 있는데.. 이 함수는 절사된 값을 출력합니다..
FLOOR(0.01) = 0, FLOOR(0,99) = 0 이죠..
SELECT DECODE(FLOOR(colVal/10), 0, 1,
DECODE(FLOOR(colVal/20), 0, 2,
DECODE(FLOOR(colVal/50), 0, 3, 4)))
FROM ...
3. 비교대상이 숫자이면서, 등호가 있는 경우(<=, >=)
물론 SIGN으로도 표현 가능합니다..
그렇지만 CEIL함수를 사용하는게 보기가 덜 복잡하다는 군요..
CEIL은 FLOOR와는 반대로 절상된 값을 보여줍니다.
CEIL(0.01) = CEIL(0.99)=1, CEIL(1.0002)=2 ...
IF colVal<=10 THEN 1
ELSE IF colVal <= 20 THEN 2
ELSE IF colVal <= 50 THEN 3
ELSE 4
를 표현한다면..
SELECT DECODE(CEIL(colVal/10), 1, 1,
DECODE(CEIL(colVal/20), 1, 2
DECODE(CEIL(colVal/50), 1, 3, 4)))
FROM ...
4. 비교대상이 숫자가 아니라 문자인경우
문자가 한 자리인 경우는 ASCII 함수를 이용해서,
두 자리이상인 경우는 GREATEST나 LEAST 함수를 사용하면 됩니다.
GREATEST는 비교하는 두 개의 인자 중에서 큰 것을 뽑아내는 함수이고,
LEAST 는 작은 것을 가려내는 함수 입니다..
IF colVal<"C" THEN 1
ELSE IF colVal<"F" THEN 2
ELSE 3
는 다음처럼 표현될 수 있습니다..
SELECT DECODE(SIGN(75-ASCII(colVal)), -1, 1,
DECODE(98-ASCII(colVal), -1, 2, 3))
FROM ....
(75와 98은 "C"와 "F"의 ASCII 코드 값임)
IF colVal<="ABC" THEN 1
ELSE IF colVal>="DEF" THEN 3
ELSE 2
는 다음 처럼.....
SELECT DECODE(LEAST(colVal, "ABC") colVal, 1,
DECODE(GREATEST(colVal, "DEF"), colVal, 3, 2))
FROM ....
IF colVal<"ABC" THEN 1
ELSE IF colVal>"DEF" THEN 3
ELSE 2
는 다음 처럼.....
SELECT DECODE(LEAST(colVal||" ", "ABC"), colVal||" ", 1,
DECODE(LEAST(colVal, "DEF"), colVal, 2, 3))
FROM ....
'Database > Oracle' 카테고리의 다른 글
ORACLE|자율 트랜잭션(Autonomous Transaction) - 채번 시 활용 (0) | 2011.07.25 |
---|---|
ORACLE|조회 쿼리(Query)에서 와일드카드(Wildcards) 문자열로 사용하기 (0) | 2011.06.07 |
ORACLE|오라클 Table/Index Analyze 확인 및 실행방법 (0) | 2010.12.25 |
ORACLE|실행계획(Explain Plan) 보는 방법 (0) | 2010.12.24 |
ORACLE|Optimizer Mode (옵티마이저 모드) (0) | 2010.12.14 |