SQL Server 테이블에 nvarchar (max) 열이 있습니다. 이 열에 '제거'문자열이 포함 된 모든 행을 선택하는 쿼리를 실행했습니다. 결과 사이에, 나는이 열이 빈 문자열로 채워지는 몇 개의 행을 가지고 있는데 왜이 값들이 반환되었는지 이해할 수 없습니다.SQL에서 LIKE 조건과 일치하는 빈 문자열 변수
반환 된 빈 문자열 값 중 하나를 조사해 보았습니다. 빈 문자열 값이 특정 LIKE 조건과 일치하지만 다른 조건은 일치하지 않는 것으로 나타났습니다. 예를 들어 '% remove %'및 '% x %'과 (와) 일치하지만 '% q %'과 (와) 일치하지 않습니다.
SQL Server Management Studio의 결과 그리드 내에서 nvarchar 필드는 빈 필드 (null이 아님)로 표시됩니다. 그러나이 필드에 len() 함수를 적용하면 649 값이 반환됩니다. 결과 테이블을 SQL Server Management Studio에서 Excel로 내보낼 때 nvarchar (max) 필드가 비어 있습니다.
필드를 채우는 공백 문자가 있어야한다고 가정하고 반환 된 값의 양쪽 끝에 'x'를 연결 한 후 필드를 선택하려고했습니다. 결과에서 선행 'x'는 문자열의 시작 부분에 나타나지만 끝에 연결된 'x'는 표시되지 않습니다.
나는 무슨 일이 벌어지고 있는지 완전히 혼란 스럽다. 요청에 따라 더 많은 정보를 제공 할 수 있습니다. 문자 수를 변경하지 않는 필드를 트리밍
:
select itemid, content
from objects
where itemid = 100 and content like '%remove%'
----------------
itemid | content
100 |
select itemid, 'x' + content + 'x' as 'content'
from objects
where itemid = 100 and content like '%remove%'
----------------
itemid | content
100 | x
편집
. 그러나 연결된 출력에서 마지막 문자를 선택하기 위해 하위 문자열을 사용하는 경우 반환되는 문자는 'x'로, 문자열의 길이 때문에 GUI 출력에 표시되지 않습니다. 그래도 Excel에 내용을 내보낼 때이 후행 'x'문자를 볼 수 없습니다. 아마도 지원되지 않는 문자가 nvarchar 변수 내에 존재한다고 생각합니다.select itemid, 'x' + ltrim(rtrim(content)) + 'x' as 'content'
from objects
where itemid = 100 and content like '%remove%'
----------------
itemid | content
100 | x
나는 재생할 수 없다. 정확히 같은 조건으로 테스트를 해 보셨나요? –
[이 동작을 재현 할 수 없음] (http://rextester.com/GQUP34325). 재현 가능한 샘플을 제공 할 수 있습니까? –
필드에서 LTRIM()을 사용해 보셨습니까? 그러면 문자열의 왼쪽에서 선행 공백이 제거됩니다. LEN (LTRIM (RTRIM (content)))을 분석 할 수도 있고, 앞뒤 공백을 제거하고 길이를 제공합니다. –