[Oracle] 오라클 문자열 길이 구하기 (LENGTH, LENGTHB)

오라클에서 문자열의 길이를 구하기 위해서는 LENGTH 함수를 사용한다. LENGTH 함수는 입력된 문자열의 글자 수를 반환하고 LENGTHB 함수는 바이트 수로 반환한다. LENGTHB 함수는 시스템 문자셋 설정에 따라서 한글을 2byte 또는 3byte로 계산하므로 주의해야 한다.

 

오라클 문자열 길이 (LENGTH)

 

LENGTH 함수 (글자 수)

SELECT LENGTH('오라클')
     , LENGTH('오라클 SQL')
  FROM dual

 


 

LENGTH 함수를 사용하면 영문, 한글, 공백(특수문자 등) 모두 1자리로 계산된다.

LENGTH 함수는 조건절이나 조건문에서 많이 사용하므로 아래의 예제를 참고하기 바란다.

 

조건절(WHERE)에 사용

SELECT ename
     , job
     , deptno
  FROM emp
 WHERE LENGTH(ename) = 6

 


 

조건문(CASE 절, DECODE 함수 등)에 사용

SELECT ename
     , sal
     , CASE WHEN LENGTH(sal) > 3 THEN '1000▲'
            ELSE '1000▽'
       END sal_lv
  FROM emp
 WHERE job = 'CLERK'

 

 

LENGTHB 함수 (바이트 수)

SELECT LENGTHB('오라클')
     , LENGTHB('오라클 SQL')
  FROM dual

 

 

LENGTHB 함수는 바이트 수로 계산되며, 영문/숫자/특수문자는 1byte 한글은 3byte로 계산된다.

한글 한 글자의 바이트 수는 시스템의 설정에 따라서 2byte 또는 3byte로 계산된다.

 

아래의 쿼리로 자신의 시스템 문자셋을 확인하면 몇 byte로 계산되는지 알 수 있다.

SELECT * 
  FROM nls_database_parameters 
 WHERE parameter LIKE 'NLS_CHARACTERSET'

 

 

한글 문자셋은 KO16KSC5601(2byte), KO16MSWIN949(2byte), UTF8(3byte), AL32UTF8(3byte)

 

한글을 2byte로 인식하게 하기 (3byte → 2byte)

SELECT LENGTHB(CONVERT('오라클', 'KO16MSWIN949'))     AS LENGTHB_1
     , LENGTHB(CONVERT('오라클 SQL', 'KO16MSWIN949')) AS LENGTHB_2
  FROM dual

 


 

CONVERT 함수를 사용하여 문자셋을 변경 후 LENGTHB 함수를 사용하면 변경한 문자셋의 바이트 수로 계산된다.

 

 

댓글

Designed by JB FACTORY