Oracle Decode()함수 사용 기법 공유

5633 단어 OracleDecode
오늘 위 에서 비슷 한 기능 을 요구 합 니 다.초보 적 으로 생각 한 열 을 옮 겨 야 합 니 다.그러나 어떻게 실현 하 는 지 좋 은 방법 이 없습니다.이 함수 가 좋 습 니 다.DECODE 함 수 는 ORACLE PL/SQL 은 기능 이 강 한 함수 중 하나 입 니 다.현재 ORACLE 회사 의 SQL 만 이 함 수 를 제 공 했 습 니 다.그의 데이터베이스 업 체 의 SQL 실현 은 아직 이 기능 이 없습니다.DECODE 는 어떤 용도 로 쓰 입 니까?먼저 예 를 들 어 우리 가 지성 직원 에 게 월급 을 올 리 고 싶다 고 가정 하면 그 기준 은 월급 이 8000 위안 이하 인 사람 은 20%를 올 리 는 것 이다.임금 은 8000 원 이상 에 15%를 더 하 는데,통상 적 으로 기록 되 어 있 는 임금 필드 값 을 먼저 고 르 는 것 은?select salary into var-salary from employee,그리고 변수 var-salary 를 if-then-else 또는 choose case 와 같은 흐름 제어 문 구 를 사용 하여 판단 합 니 다.만약 DECODE 함 수 를 사용한다 면 우 리 는 이 흐름 제어 문 구 를 생략 하고 SQL 문 구 를 통 해 직접 완성 할 수 있다.다음:select decode(sign(salary-8000),1,salary*1.15,-1,salary*1.2,salary from employee 는 간결 하지 않 습 니까?DECODE 의 문법:DECODE(value,if1,then 1,if2,then 2,if3,then 3,...,else)는 value 가 if1 과 같 을 때 DECODE 함수 의 결 과 는 then 1 로 되 돌아 가 는 것 을 나타 낸다.처음에 보면 DECODE 는 테스트 와 같 을 수 밖 에 없 지만 방금 도 보 았 습 니 다.우 리 는 일부 함수 나 계산 을 통 해 value 를 대체 하면 DECODE 함수 가 크 고 작 거나 같은 기능 을 가 질 수 있 습 니 다.
DECODE(조건,값 1,번역 값 1,값 2,번역 값 2,...값 n,번역 값 n,결 성 값)DECODE(필드,비교 1,값 1,비교 2,값 2,....,비교 n,값 n 결 성 값)  이 함수 의 의 미 는 다음 과 같다.IF 조건=값 1 THEN RETURN(번역 값 1)ELSIF 조건=값 2 THEN RETURN(번역 값 2)...ELSIF 조건=값 n THEN RETURN(번역 값 n)ELSE RETURN(결 성 값)END IF
decode()함수 사용 방법
・소프트웨어 환경:
  1、Windows NT4.0+ORACLE 8.0.4
2.ORACLE 설치 경로:C:/ORANT
・사용 방법:
1.크기 비교
select decode(sign(변수 1-변수 2),-1,변수 1,변수 2)from dual;--작은 값 을 취하 다
sign()함 수 는 특정한 값 이 0,양수 인지 음수 인지 에 따라 각각 0,1,-1 을 되 돌려 줍 니 다.
예 를 들 면:
변수 1=10,변수 2=20
싸 인(변수 1-변수 2)이-1 을 되 돌려 주 고 decode 디 코딩 결 과 는'변수 1'로 작은 값 을 취 하 는 목적 을 달성 했다.
2.표,보기 구조 전환
현재 하나의 상품 판매 표 sale,표 구 조 는:
month char(6)--달
sell number(10,2)--월 매출 금액
현재 데 이 터 는:
  200001  1000
  200002  1100
  200003  1200
  200004  1300
  200005  1400
  200006  1500
  200007  1600
  200101  1100
  200202  1200
  200301  1300
다음 구조 로 전환 하려 는 데이터:
year char(4)--연도
month 1 number(10,2)--1 월 판매 금액
month 2 number(10,2)--2 월 판매 금액
month 3 number(10,2)--3 월 판매 금액
month 4 number(10,2)--4 월 판매 금액
months 5 number(10,2)--5 월 판매 금액
months 6 number(10,2)--6 월 판매 금액
month 7 number(10,2)--7 월 판매 금액
months 8 number(10,2)--8 월 판매 금액
month 9 number(10,2)--9 월 판매 금액
month 10 number(10,2)--10 월 판매 금액
month 11 number(10,2)--11 월 판매 금액
month 12 number(10,2)--12 월 판매 금액
구조 전환 SQL 문 구 는 다음 과 같 습 니 다.
  create or replace view
  v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
  as
  select
  substrb(month,1,4),
  sum(decode(substrb(month,5,2),'01',sell,0)),
  sum(decode(substrb(month,5,2),'02',sell,0)),
  sum(decode(substrb(month,5,2),'03',sell,0)),
  sum(decode(substrb(month,5,2),'04',sell,0)), 
======================================================
보충 1:
학생 성적표 student 이 있 습 니 다.지금 decode 함수 로 다음 과 같은 몇 가지 기능 을 실현 해 야 합 니 다.성적>85,우수 함 을 표시 합 니 다.>70 잘 보이 기;>60 합격;그렇지 않 으 면 불합격 이다.
student 의 번호 가 id 이 고 성적 이 score 라 고 가정 하면 select id,decode(score-85),1,'우수',0,'우수',-1,decode(sign(score-70),1,'양호',0,'양호',-1,decode(sign(score-60),1,'합격',0,'및 합격',-1,'불합격')from student;
======================================================
보충 2:Decode 함수 의 문법 구 조 는 다음 과 같 습 니 다:decode(expression,search1, result_1)decode (expression, search_1, result_1, search_2, result_2)decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n)
decode (expression, search_1, result_1, default)decode (expression, search_1, result_1, search_2, result_2, default)decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)
decode 함수 비교 표현 식 과 검색 어,일치 하면 결 과 를 되 돌려 줍 니 다.일치 하지 않 으 면 default 값 을 되 돌려 줍 니 다.default 값 이 정의 되 지 않 으 면 빈 값 으로 돌아 갑 니 다.다음은 Decode 함수 의 용법 을 설명 하 는 간단 한 테스트 입 니 다.SQL>create table t as select username,defaulttablespace,lock_date from dba_users;
Table created.
SQL> select * from t;
USERNAME                        DEFAULT_TABLESPACE              LOCK_DATE------------------------------ ------------------------------ ---------SYS                             SYSTEMSYSTEM                          SYSTEMOUTLN                           SYSTEMCSMIG                           SYSTEMSCOTT                           SYSTEMEYGLE                           USERSDBSNMP                          SYSTEMWMSYS                           SYSTEM                          20-OCT-04
8 rows selected.
SQL> select username,decode(lock_date,null,'unlocked','locked') status from t;
USERNAME                        STATUS------------------------------ --------SYS                             unlockedSYSTEM                          unlockedOUTLN                           unlockedCSMIG                           unlockedSCOTT                           unlockedEYGLE                           unlockedDBSNMP                          unlockedWMSYS                           locked
8 rows selected.
SQL> select username,decode(lock_date,null,'unlocked') status from t;
USERNAME                        STATUS------------------------------ --------SYS                             unlockedSYSTEM                          unlockedOUTLN                           unlockedCSMIG                           unlockedSCOTT                           unlockedEYGLE                           unlockedDBSNMP                          unlockedWMSYS8 rows selected.

좋은 웹페이지 즐겨찾기