SQL에서 쿼리를 사용할 경우 일정 길이에 해당하는 경우만 select문을 사용하여 값을 불러오는 경우가 있을 수 있습니다. 예를들면 테이블에 name이라는 필드가 있는데 여기서 모든 값을 불러오는 것이 아니라 10자리 이내의 값만 불러오려면 어떻게 해야할까요? 이런 경우 서버언어에서 불러온 값을 처리하여 보여주는 방법이 있을 수 있으나 쿼리에 적용하여 해당하는 값만을 db에서 불러오는 방법이 가장 쉽고 간편한 방법이라 하겠습니다.

이처럼 구현하기 위해서는 쿼리에 사용가능한 키워드를 사용해야합니다. 이때 LENGTH() 또는 CHAR_LENGTH()를 사용할 수 있습니다. 아래는 이를 구현하기 위한 방법과 간단한 예제소스를 알아보겠습니다.

참고로 위 함수는 php의 strlen() 처럼 일정한 문자 길이만 불러와 반환합니다. 이를 select문에서 실행하는 방법입니다.

CHAR_LENGTH(해당문자열)

간단한 실행방법은 이와 같고 실행시 해당 문자열의 길이를 반환합니다. 아래 쿼리문 작성을 봐주세요.



! 문자 길이에 맞는 SELECT문 예제보기

먼저 테이블에 다음과 같은 값이 있는 경우에 이를 사용해 데이터를 불러오려고 합니다. 아래는 테이블이 가지고 있는 데이터 상세정보입니다. 


# 테이블명 : classA
====================
    id    ||           name
====================
  1       ||     tim
  2       ||     david
  3       ||     will
  4       ||     olivia
  5       ||     leonardo
====================

이 데이터에서 만약 이름이 4자리 이하인 경우에만 불러오는 방법은 어떻게해야할까요? 방법은 아래와 같습니다. 아래는 CHAR_LENGTH() 를 사용하여 현재 필드(컬럼)의 레코드값을 알아냅니다. 이를 부등호를 사용하여 4보다 작거나 같은 경우에만 해당값을 불러오게되는 것입니다. 

SELECT * FROM classA WHERE CHAR_LENGTH(name) < = 4;

위 코드의 실행결과로 아래와 같이 데이터를 불러올 것입니다.

1   tim
3   will

불러온 데이터는 총 2개의 값을 가지게 됩니다. 그렇다면 아래는 추가로 한가지 예제를 더 알아보겠습니다. 이번에는 만약 길이가 5인 데이터만 불러올 경우의 예제소스입니다. 아래를 확인해 주세요


# 길이가 5인 데이터만 불러오기

SELECT * FROM classA WHERE CHAR_LENGTH(name) = 5;

이미 예상하셨겠지만 결과는 단 하나인 david만 불러오게됩니다.

2   david



# 참고사항 - LENGTH 그리고 CHAR_LENGTH의 차이점은?
이 둘의 차이점은 무엇일까요? 문자열의 기준이 되는 값의 차이입니다. 이 둘은 바이트(byte) 단위나 문자열 단위로 구분될 수 있습니다. 즉 문자 하나가 1바이트, 2바이트이냐에 따라 둘의 값이 전혀달라질 수 있습니다.

LENGTH() // byte 값을 반환
CHAR_LENGTH() // 문자열 길이를 반환


이를 통해 알 수 있는 것은 만약 문자 길이를 기준으로 한다면.. 특히 다양한 언어를 사용한다면 CHAR_LENGTH()를 사용하는 것이 더 효과적이라 말할 수 있을 것입니다.