다음을 통해 공유


문자열 값의 함수 - 문자열 길이

적용 대상: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;  

이전 쿼리의 다음 사항에 유의하세요.

  • pdwm 은 이 쿼리에 사용되는 네임스페이스 접두사입니다. 이 접두사는 쿼리 중인 문서에 사용되는 동일 네임스페이스를 식별합니다.

  • 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>  
...  

참고 항목

xml 데이터 형식에 대한 XQuery 함수