복붙노트

[SQL] 오라클의 DECODE 함수의 MySQL의 동등한

SQL

오라클의 DECODE 함수의 MySQL의 동등한

나는 MySQL은 DECODE 함수의 상당을 찾기 위해 노력하고있다. 그것은 다음과 같이 작동합니다 :

Select Name, DECODE(Age,
       13,'Thirteen',14,'Fourteen',15,'Fifteen',16,'Sixteen',
       17,'Seventeen',18,'Eighteen',19,'Nineteen',
       'Adult') AS AgeBracket
FROM Person

디코드 기능, 14, 13 (15) 컬럼의 값 '나이'를 비교 .. 적절한 문자열 값 '13', '포티'를 반환 ... 그것은 아무것도 일치하는 경우, '성인'의 다음 디폴트 값이 반환 될 것입니다 .

이 일을 할 수있는 MySQL의 함수 어떤 아이디어? 감사.

설명 : 나는 CASE를 사용하여 원하는 결과를 달성하는 방법 중 하나입니다 동의하지만, 오히려 때문에 성능과 다른 이유의 함수를 찾고 있어요.

해결법

  1. ==============================

    1.당신은 () 여기서 오라클이 사용 DECODE있을 것입니다 () IF를 사용할 수 있습니다.

    당신은 () 여기서 오라클이 사용 DECODE있을 것입니다 () IF를 사용할 수 있습니다.

    mysql> select if(emp_id=1,'X','Y') as test, emp_id from emps; 
    
  2. ==============================

    2.당신은 그러나 왜 그냥 0과 150 사이의 연령대에 정수와 테이블을 생성하지 않습니다 ... case 문을 사용하여, 상기 기입 나이에 VARCHAR 그리고 당신은 단지에 가입하실 수 있습니다

    당신은 그러나 왜 그냥 0과 150 사이의 연령대에 정수와 테이블을 생성하지 않습니다 ... case 문을 사용하여, 상기 기입 나이에 VARCHAR 그리고 당신은 단지에 가입하실 수 있습니다

  3. ==============================

    3.

    Select Name, 
    case 
      when Age = 13 then 'Thirteen'
      when Age = 14 then 'Fourteen'
      when Age = 15 then 'Fifteen'
      when Age = 16 then 'Sixteen'
      when Age = 17 then 'Seventeen'
      when Age = 18 then 'Eighteen'
      when Age = 19 then 'Nineteen'
      else 'Adult'
    end as AgeBracket
    FROM Person
    
  4. ==============================

    4.더 오라클의 DECODE처럼 보일 수있는 또 다른 MySQL의 옵션은 필드와 ELT의 조합입니다. 다음 코드에서 FIELD ()는 연령과 일치하는 문자열의 인수 목록의 위치를 ​​반환합니다. ELT ()는 FIELD에서 제공하는 위치 ()에서 ELTs 인수 목록에서 문자열을 반환합니다. 나이 인 경우 14 FIELD (나이를 계산하지 않음)의 2 인자이기 때문에 예를 들어, 14, FIELD (나이, ...)이 반환합니다. 그런 다음, ELT (2, ...) 반환 '포티', ELT의 2 인자 (필드 () 인수를 계산하지 않음)이다. 나이에 일치하는 목록에서 발견되지 않는 경우 IFNULL 기본 AgeBracket를 반환합니다.

    더 오라클의 DECODE처럼 보일 수있는 또 다른 MySQL의 옵션은 필드와 ELT의 조합입니다. 다음 코드에서 FIELD ()는 연령과 일치하는 문자열의 인수 목록의 위치를 ​​반환합니다. ELT ()는 FIELD에서 제공하는 위치 ()에서 ELTs 인수 목록에서 문자열을 반환합니다. 나이 인 경우 14 FIELD (나이를 계산하지 않음)의 2 인자이기 때문에 예를 들어, 14, FIELD (나이, ...)이 반환합니다. 그런 다음, ELT (2, ...) 반환 '포티', ELT의 2 인자 (필드 () 인수를 계산하지 않음)이다. 나이에 일치하는 목록에서 발견되지 않는 경우 IFNULL 기본 AgeBracket를 반환합니다.

    Select Name, IFNULL(ELT(FIELD(Age,
           13, 14, 15, 16, 17, 18, 19),'Thirteen','Fourteen','Fifteen','Sixteen',
           'Seventeen','Eighteen','Nineteen'),
           'Adult') AS AgeBracket
    FROM Person
    

    내가 성능이나 가독성 측면에서 하나이 질문에 대한 최선의 해결책이라고 생각하지 않지만 그것은 MySQL을의 문자열 함수의 탐사와 같은 흥미 롭다. FIELD의 출력은 대소 문자를 구분 될 것 같지 않습니다 있음을 유의하십시오. 즉 FIELD ( 'A', 'A') 및 필드 ( 'A', 'A')을 모두 리턴 1.

  5. ==============================

    5.예는 직접 변환 :

    예는 직접 변환 :

    Select Name, CASE Age
           WHEN 13 then 'Thirteen' WHEN 14 then 'Fourteen' WHEN 15 then 'Fifteen' WHEN 16 then 'Sixteen'
           WHEN 17 then 'Seventeen' WHEN 18 then 'Eighteen' WHEN 19 then 'Nineteen'
           ELSE 'Adult' END AS AgeBracket
    FROM Person
    

    어떤 당신은 예를 포맷하는 것이 좋습니다 이 같은 :

    Select Name,
           CASE Age
             when 13 then 'Thirteen'
             when 14 then 'Fourteen'
             when 15 then 'Fifteen'
             when 16 then 'Sixteen'
             when 17 then 'Seventeen'
             when 18 then 'Eighteen'
             when 19 then 'Nineteen'
             else         'Adult'
           END AS AgeBracket
    FROM Person
    
  6. ==============================

    6.추가 테이블이 맞지 않는 경우, 당신은 번역에 대한 자신의 기능을 쓸 수 있습니다.

    추가 테이블이 맞지 않는 경우, 당신은 번역에 대한 자신의 기능을 쓸 수 있습니다.

    사건을 SQL 함수의 플러스는 다양한 장소에서 사용, 한 곳에서 번역 논리를 유지할 수있다.

  7. ==============================

    7.다음과 같이 MySQL의에서 디코드 () 대신에 () 경우 사용할 수 있습니다   이 쿼리는 모든 짝수 번호 행을 인쇄합니다.

    다음과 같이 MySQL의에서 디코드 () 대신에 () 경우 사용할 수 있습니다   이 쿼리는 모든 짝수 번호 행을 인쇄합니다.

    mysql> select id, name from employee where id in
    -> (select if(id%2=0,id,null) from employee);
    
  8. ==============================

    8.이 시도:

    이 시도:

    Select Name, ELT(Age-12,'Thirteen','Fourteen','Fifteen','Sixteen',
       'Seventeen','Eighteen','Nineteen','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult',
       'Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult','Adult') AS AgeBracket FROM Person
    
  9. from https://stackoverflow.com/questions/4706100/mysql-equivalent-of-decode-function-in-oracle by cc-by-sa and MIT license