2009-07-20 6 views
23

최근 len()을 쿼리에서 사용하여 len()이 값의 후행 공백을 계산하지 않을 때 문제가 발생했습니다. 그러나 datalength()는 뒤 공백도 계산합니다.len() Vs datalength() 대 sqlserver 2005

즉, 값의 실제 길이를 처리하는 일부 연산을 수행 할 경우 len()에 대해 dalalength()를 사용해야 함을 의미합니다.

예 : 특정 값의 값이 10 자 길이 인 경우 필요합니다. 즉, 값이 3 문자 길이라면 7 개의 공백을 추가해야합니다.

감사합니다.

답변

16

예, 정확히 수행해야합니다. 블랭크를 제외한 문자 수를 얻으려는 경우 DATALENGTH() 인 반면 LEN() 함수를 사용합니다.

LEN()

DATALENGTH()

+2

및 LEN()가 실제로 않습니다 ** ALSO ** 카운트 공백 ....... –

+0

LEN (하나를 N'testing 둘 셋, 아무것도 아니야. g하지만 테스트 ') 공백을 포함하여 41 문자를 반환합니다 (및 DATALENGTH() 반환합니다 82) –

+6

@marc_s ... 그것은 후행 공백을 계산하지 않습니다. LEN ('HELLO'), LEN ('HELLO') 및 LEN ('HELLO')은 5, 5 및 10을 연속적으로 반환합니다. 이것은 문서화되어 있습니다 (""). –

30

:

에도 LEN() 문서는 DATALENGTH() 여기

MSDN의 문서에 대한 링크가 사용해야하는 확장을 나타내는 바이트의 수를 얻을 수있는 정보가 조심해. DATALENGTH은 문자 수가 아닌 사용 된 바이트 수를 반환합니다. 대신 VARCHAR의 NVARCHAR를 사용하는 경우

+6

NVARCHAR 필드의 +1 LEN은 문자열의 문자 수를 반환하고 DATALENGTH()는 해당 숫자의 두 배를 반환합니다 (NVARCHAR는 문자 당 2 바이트를 저장하므로) –

+1

@marc_s , 언제나처럼 :) –

11

렌하지 저장에 필요한 사용되는 문자의 수를 계산,이 중 하나를

을 살펴

렌은 후행 공백을 계산하지 않습니다 더 분명있을 것입니다

declare @v nchar(5) 
select @v ='ABC ' 


select len(@v),datalength(@v) 

과 데이터 길이에 대한 출력 = 10

2

그냥 사용) (교체하면서 LEN의 출력은 3 :

SELECT LEN(REPLACE(N'4 Trailing Spaces: ', ' ', '_')) 

이렇게하면 후행 공백이 LEN()이 실제로 세는 문자로 바뀝니다.

DataLength() 문제는 유니 코드 문자열의 데이터 길이를 2로 나눌 필요가 있는지 알기 위해 문자열이 유니 코드 (nChar, nVarChar) 또는 ASCII (Char, VarChar)인지 추적해야합니다.

0

나는 Len을 사용하려고했는데 (놀랍게도 (blah blah ',' ','_ ') 제안을 사용하면 훨씬 효율적으로 사용할 수 있습니다. 내가 그랬어

LEN ('ㅋ ㅋ ㅋ ㅋ'+ '.') -. 1