본문 바로가기
개발공부/SQL

[ORACLE] 값이 한글로 되어있는 데이터 찾기

by 양히◡̈ 2023. 2. 14.

오라클에는 문자열의 길이를 가져오는 LENGTH와 LENGTHB 함수가 있다.

LENGTH는 순수하게 문자열의 길이를 반환하고,

LENGTHB는 문자열의 Byte를 반환하는데,

영어의 경우 문자열의 길이와 Byte가 동일하지만 한글은 사용하고 있는 DB의 캐릭터셋에 따라 다르지만 2Byte 혹은 3Byte로 문자열의 길이와 Byte가 일치하지 않는다.

이 점을 이용해 LENGTH와 LENGTHB의 반환값이 일치하지 않는 데이터를 찾으면 되는 것이다.

 

with example as (
    SELECT '김미희' AS name FROM DUAL
    UNION ALL SELECT 'Alice' AS name FROM DUAL
    UNION ALL SELECT 'John' AS name FROM DUAL
    UNION ALL SELECT '강하늘' AS name FROM DUAL
)
SELECT
    name,
    LENGTH(name),
    LENGTHB(name)
FROM
    example
    WHERE LENGTH(name) <> LENGTHB(name);

해당 쿼리의 조회 결과이다.

내가 사용하고 있는 DB 데이터셋은 AL32UTF8 이기 때문에 한글을 3Byte로 표현하고 있다.

댓글