DataLength()

-- MSSQL 2010. 3. 19. 19:07
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
컬럼중 특정한 문자 갯수를 알고 싶을 때 다음과 같은 SQL 문으로 갯수를 알수 있습니다.

DECLARE @컬럼 VARCHAR(100)
SET @컬럼 = 'aaabbbb@aaaaaaa@aabbbb@addddd'
SELECT LEN(@컬럼) - LEN(replace(@컬럼,'@',''))

@문자의 갯수는 3이다.

LEN 함수는 주어진 문자열 식의 바이트 수 대신 후행 공백을 제외한 문자 수를 반환합니다.
이럴 경우는 드믈겠지만 만약에 문자열 뒷쪽에 공백문자가 있을때 공백문자의 갯수를 구하고 싶을경우에는 LEN함수를 사용할 수 없습니다. 그럴때는 식을 표시하는 데 사용된 바이트 수를 반환하는 DATALENGTH 함수를 사용합니다.

DECLARE @컬럼2 VARCHAR(100)
SET @컬럼2 = 'aaabbbb@aaaaaaa@aabbbb@addddd    '
SELECT DATALENGTH(@컬럼2) - DATALENGTH(replace(@컬럼2,' ',''))

공백문자 (' ') 의 갯수는 4 이다.

LEN( ) 함수와 공백문자
문1) '123' 문자와 공백문자 4개 그리고 '4'문자를 합친 문자의 길이는 어떻게 될까?

SELECT LEN ('123'+' '+'4')

정답은 아시다시피 8 이다.

문2) 그럼 '123' 문자와 공백문자 5개를 합친 문자의 길이는 어떻게 될까?

SELECT LEN ('123'+' ')

8일까? 아님 3일까?
정답은 3 이다.

Books Online (BOL)을 찾아보면 LEN() 함수는 "주어진 문자열 식의 바이트 수 대신 후행 공백을 제외한 문자 수를 반환합니다" 로 정의 되어 있는걸 알수 있다. 그런데 후행의 공백문자까지 길이를 알고 싶다면 어떻게 해야 할까? 그렇다면 식을 표시하는 모든 바이트 수를 나타내는 DATALENGTH( ) 함수를 사용하면 된다.

SELECT DATALENGTH ('123'+' ')

공백문자의 갯수를 합친 8이 결과 값으로 나온다. 앞으로 사용자가 문자의 길이 함수 사용시 후행 공백문자의 사용 유무에 따라 LEN(), DATALENGTH() 함수를 적절히 사용하자.
posted by 어린왕자악꿍