문제

최근에 나는 사용할 때 문제에 직면했다 len() 쿼리의 길이를 찾기 위해 쿼리에서 len() 값의 후행 공간을 세지 않았습니다. 하지만 datalength() 후행 공간도 계산하고 있습니다.

이것은 값의 실제 길이를 다루는 작업을 수행하는 경우 사용해야한다는 것을 의미합니다. dalalength() ~ 위에 len().

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

도움이 되었습니까?

해결책

그렇습니다. 정확히 당신이해야 할 일입니다. 공백을 제외한 문자 수를 얻으려면 사용할 수 있습니다. LEN() 다른 모든 경우에 기능 DATALENGTH().

조차 LEN() 문서에는 사용해야하는 확장자를 나타 내기 위해 바이트 수를 얻는 정보가 있습니다. DATALENGTH()

MSDN 문서에 대한 링크는 다음과 같습니다.

렌 ()

데이터 길이 ()

다른 팁

조심하세요. 데이터 길이 문자 수가 아닌 사용 된 바이트 수를 반환합니다.

Len은 필요한 스토리지가 아닌 사용 된 문자 수를 계산합니다. 이것은 Varchar 대신 Nvarchar를 사용할 때 더욱 분명합니다.

Len은 후행 공간도 계산하지 않습니다

이것을 살펴보십시오

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


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

LEN의 출력은 3이고 Datalenger = 10의 출력

대체 ()를 사용합니다.

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

이것은 후행 공간을 Len ()가 실제로 계산할 캐릭터로 대체합니다.

Datalength ()의 문제점은 유니 코드 문자열의 데이터 길이를 2로 나누어야하는지 확인하기 위해 문자열이 유니 코드 (nchar, nvarchar) 또는 ascii (char, varchar)를 추적해야한다는 것입니다.

나는 Len ( 'blah blah', '', '_') 제안을 사용하려고했다.

Len ( 'blah blah' + '.') -1

불행히도 내가 알고있는 완벽한 솔루션은 없습니다.

제안 된 솔루션 중 하나, LEN(string + '.')-1 문자열이 크기 4000 또는 비 유니 코드의 유니 코드이고 크기 8000 인 경우 잘못된 결과 (-1)를 반환합니다. 이는 연결이 무시되기 때문입니다. 원한다면 문자열을 최대 크기 문자열로 캐스팅하여 이것을 극복 할 수 있습니다. LEN(CAST(string as nvarchar(max)) + '.')-1,하지만 그만한 가치가 있습니까?

다른 사람들이 언급했듯이 DATALENGTH(string) 저장에 사용되는 바이트 수를 반환합니다. 유니 코드 문자열의 경우 결과를 2로 나누는 것으로 충분하지 않을 수 있습니다. 유니 코드 대리 문자 16 비트 이상을 차지할 수 있습니다.

대체로, 각 접근 방식의 한계를 염두에두고 문제가 적을 것이라고 믿는 모든 것을 선택하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top