본문 바로가기

DB

오라클,MySQL 특정 문자 정렬

반응형

리스트를 출력하다보면 특정문자로 정렬해서 나타내야되는 경우가있다.

예를들어 데이터 중 필드에 '완료'가 된 데이터를 먼저 출력해야될때가 있다면

오라클의경우

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