정렬을 할 때, 단순히 오름차순이나 내림차순이 아닌 특정 조건을 기준으로 정렬을 해야하는 경우가 있다.

이런 경우에 ORDER BY부분에서 DECODE나 CASE를 이용하여 표현할 수 있다.


1. CASE 사용방법

SELECT *

  FROM 테이블명

 ORDER BY (

 CASE 컬럼명

 WHEN 조건A THEN 1

 WHEN 조건B THEN 2

 ELSE 3

 END

 )


사실 SELECT 부분에서 많이 사용하는 형태로 익숙한 형태이긴 한데, 정렬부분에서 사용한 적이 없어서 익숙하지 않은 느낌이 들었다.

THEN과 ELSE뒤에 숫자는 출력 순서를 나타낸다.


2. DECODE 사용방법

SELECT *

  FROM 테이블명

 ORDER BY DECODE(컬럼명, 조건A, 1, 조건B, 2, 3)


위의 CASE로 정렬한 것과 같은 내용이며, 역시 숫자는 출력 순서를 나타낸다.

오라클에 데이터를 넣을 때, 다양한 데이터가 들어갈 수 있지만 textarea와 같은 곳에 들어간 내용은 줄바꿈이 필요할 경우가 있다.

기본적으로 개행을 삽입하기 위해서 아래와 같이 표현할 수 있다.


UPDATE 테이블 명

SET '안녕'||CHR(13)||CHR(10)||'하세요'

WHERE 조건


결과값 : 

안녕

하세요


*) CHR()은 숫자를 아스키코드로 변환해주는 함수이며,

CHR(13) : carriage return(캐리지 리턴) > 현재 라인의 첫 번째 자리에 커서를 위치

CHR(10) : new line(라인 피트) > 커서 위치를 아래쪽으로 이동

각각 위와 같은 의미를 가지고 있으므로 현재 라인 첫번째 자리에서 아래로 커서가 이동하여 '\n'과 같은 줄바꿈을 확인할 수 있다.



반대로 개행을 제거하기 위해서는 아래와 같이 replace를 이용하여 처리할 수 있다.


replace(컬럼명, CHR(13) || CHR(10), '')

replace(replace(컬럼명, CHR(10), ''), CHR(13), '')



+ Recent posts