오라클에는 문자열의 길이를 가져오는 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로 표현하고 있다.
'개발공부 > SQL' 카테고리의 다른 글
[ORACLE] 특수문자 찾기/특수문자 치환하기/특수문자 정규식 (0) | 2023.03.31 |
---|---|
[ORACLE] 숫자 외의 데이터가 있는 필드 찾기(하이픈 포함 여부) (0) | 2023.02.14 |
[ORACLE] 함수(Function) 찾기 (0) | 2023.02.14 |
[ORACLE] DB에 저장된 HTML태그 제거 (0) | 2022.10.27 |
[ORACLE] LISTAGG를 활용하여 하나의 행으로 합치기 (0) | 2022.09.14 |
댓글