문자열 값의 함수 - 문자열 길이
적용 대상:SQL Server
문자열의 길이를 문자로 반환합니다.
구문
fn:string-length() as xs:integer
fn:string-length($arg as xs:string?) as xs:integer
인수
$arg
길이를 계산할 원본 문자열입니다.
설명
$arg 값이 빈 시퀀스이면 xs:integer 값 0이 반환됩니다.
XQuery 함수에서 서로게이트 쌍의 동작은 데이터베이스 호환성 수준에 따라 달라집니다. 호환성 수준이 110 이상인 경우 각 서로게이트 쌍은 단일 문자로 계산됩니다. 이전 호환성 수준의 경우 두 문자로 계산됩니다. 자세한 내용은 ALTER DATABASE 호환성 수준(Transact-SQL) 및 데이터 정렬 및 유니코드 지원을 참조하세요.
값에 두 개의 서로게이트 문자로 표시되는 4 바이트 유니코드 문자가 포함된 경우 SQL Server는 서로게이트 문자를 개별적으로 계산합니다.
매개 변수가 없는 string-length()는 조건자 내에서만 사용할 수 있습니다. 예를 들어 다음 쿼리는 요소를 반환합니다 <ROOT
> .
DECLARE @x xml;
SET @x='<ROOT>Hello</ROOT>';
SELECT @x.query('/ROOT[string-length()=5]');
보조 문자(서로게이트 쌍)
XQuery 함수에서 서로게이트 쌍의 동작은 데이터베이스 호환성 수준 및 경우에 따라 함수의 기본 네임스페이스 URI에 따라 달라집니다. 자세한 내용은 SQL Server 2016의 데이터베이스 엔진 기능 주요 변경 내용 항목에서 "XQuery 함수는 서로게이트 인식" 섹션을 참조하세요. ALTER DATABASE 호환성 수준(Transact-SQL) 및 데이터 정렬 및 유니코드 지원도 참조하세요.
예
이 항목에서는 AdventureWorks 데이터베이스의 다양한 xml 형식 열에 저장된 XML 인스턴스에 대한 XQuery 예제를 제공합니다.
A. string-length() XQuery 함수를 사용하여 긴 요약 설명이 있는 제품 검색
요약 설명이 50자보다 큰 제품의 경우 다음 쿼리는 제품 ID, 요약 설명의 길이 및 요약 자체인 <Summary
> 요소를 검색합니다.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' as pd)
SELECT CatalogDescription.query('
<Prod ProductID= "{ /pd:ProductDescription[1]/@ProductModelID }" >
<LongSummary SummaryLength =
"{string-length(string( (/pd:ProductDescription/pd:Summary)[1] )) }" >
{ string( (/pd:ProductDescription/pd:Summary)[1] ) }
</LongSummary>
</Prod>
') as Result
FROM Production.ProductModel
WHERE CatalogDescription.value('string-length( string( (/pd:ProductDescription/pd:Summary)[1]))', 'decimal') > 200;
이전 쿼리의 다음 사항에 유의하세요.
WHERE 절의 조건은 XML 문서에 저장된 요약 설명이 200자보다 긴 행만 검색합니다. value() 메서드(XML 데이터 형식)를 사용합니다.
SELECT 절은 원하는 XML만 생성합니다. 쿼리() 메서드(XML 데이터 형식)를 사용하여 XML을 생성하고 XML 문서에서 데이터를 검색하는 데 필요한 XQuery 식을 지정합니다.
이는 부분적인 결과입니다.
Result
-------------------
<Prod ProductID="19">
<LongSummary SummaryLength="214">Our top-of-the-line competition
mountain bike. Performance-enhancing options include the
innovative HL Frame, super-smooth front suspension, and
traction for all terrain.
</LongSummary>
</Prod>
...
B. string-length() XQuery 함수를 사용하여 보증 설명이 짧은 제품 검색
보증 설명이 20자 미만인 제품의 경우 다음 쿼리는 제품 ID, 길이, 보증 설명 및 요소 자체를 포함하는 XML을 <Warranty
> 검색합니다.
보증은 제품 기능 중 하나입니다. 선택적 <Warranty
> 자식 요소는 요소 뒤에 잇습니다 <Features
> .
WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
for $ProdDesc in /pd:ProductDescription,
$pf in $ProdDesc/pd:Features/wm:Warranty
where string-length( string(($pf/wm:Description)[1]) ) < 20
return
<Prod >
{ $ProdDesc/@ProductModelID }
<ShortFeature FeatureDescLength =
"{string-length( string(($pf/wm:Description)[1]) ) }" >
{ $pf }
</ShortFeature>
</Prod>
') as Result
FROM Production.ProductModel
WHERE CatalogDescription.exist('/pd:ProductDescription')=1;
이전 쿼리의 다음 사항에 유의하세요.
pd 및 wm 은 이 쿼리에 사용되는 네임스페이스 접두사입니다. 이 접두사는 쿼리 중인 문서에 사용되는 동일 네임스페이스를 식별합니다.
XQuery는 중첩된 FOR 루프를 지정합니다. 요소의 ProductModelID 특성을 검색하려면 외부 FOR 루프가 <
ProductDescription
> 필요합니다. 20자 미만의 보증 기능 설명이 있는 제품만 사용하려면 내부 FOR 루프가 필요합니다.
다음은 부분 결과입니다.
Result
-------------------------
<Prod ProductModelID="19">
<ShortFeature FeatureDescLength="15">
<wm:Warranty
xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>
<wm:Description>parts and labor</wm:Description>
</wm:Warranty>
</ShortFeature>
</Prod>
...