반응형
리스트를 출력하다보면 특정문자로 정렬해서 나타내야되는 경우가있다.
예를들어 데이터 중 필드에 '완료'가 된 데이터를 먼저 출력해야될때가 있다면
오라클의경우
SELECT * FROM T_TABLE ORDER BY DECODE(F_STATUS,'완료',1);
이런식으로 오라클 내장 함수인 DECODE를 사용하여 F_STATUS에 완료인 필드들을 1순위로 출력해주면 된다.
Mysql(MariaDB)의경우
SELECT * FROM T_TABLE ORDER BY FIELD(F_STATUS,'가','가나다') DESC;
Mysql의 경우 FIELD함수를 사용하여 위와같이 1순위 '가', 2순위 '가나다' 라는 단어가 필드에 들어가는 데이터 우선정렬을 출력해줄 수 있다.
오라클과 Mysql의 다른점은 오라클 DECODE의 경우 LIKE가 아닌 EQUAL(=) 이라는 점이다.
DECODE에는 LIKE를 사용할 수 없다는점에서 FIELD와 다르다.
그렇다면 오라클은 LIKE를 사용해서 단어정렬을 사용하려면 다른방법을 사용해야된다.
1. CASE WHEN을 사용
SELECT * FROM T_TALBE ORDER BY (CASE WHEN F_STATUS LIKE '%'||'완료'||'%' THEN 1 ELSE 2 END);
이런식으로 쿼리를 날려보면 맨처음 DECODE를 사용했을때와 '거의' 같은 결과값이 나올것이다. 일치와 유사일치 정도의 차이다.
CASE WHEN의 경우는 오라클이 아닌 다른 DB에서도 사용할 수 있으니 CASE로 익혀두는것이 좋을듯하다.
2. DECODE 속 SUTSTR 사용
SELECT * FROM T_TABLE ORDER BY DECODE(SUBSTR(F_STATUS,0,2),'완료',1);
자신이 죽어도 DECODE를 사용해야겠다 하는경우에는 DECODE속에서 SUBSTR로 해당 단어를 잘라서 검색하는 경우도 있다. 검색하려는 단어에따라서 자르게되는 길이도 변동이 되야하므로 CASE WHEN 을 사용하는것이 낫다고 생각한다
반응형
'DB' 카테고리의 다른 글
db 테이블 명세서 작성 쿼리 (0) | 2024.10.17 |
---|---|
join 다중 업데이트 (0) | 2024.10.17 |
쿼리 조건절 유의점 (0) | 2024.08.24 |
쿼리 속도차이 (0) | 2024.03.22 |
EXISTS, IN 차이점 (0) | 2024.03.22 |