다음을 통해 공유


string-length 함수(XQuery)

문자의 문자열 길이를 반환합니다.

구문

fn:string-length() as xs:integer
fn:string-length($arg as xs:string?) as xs:integer

인수

  • $arg
    길이를 계산할 원본 문자열입니다.

주의

$arg 값이 빈 시퀀스인 경우 xs:integer 값이 0으로 반환됩니다.

값에 두 개의 서로게이트 문자로 표현된 3바이트 유니코드 문자가 포함된 경우 SQL Server는 서로게이트 문자 개수를 별개로 셉니다.

매개 변수가 없는 **string-length()**는 조건자 내에서만 사용할 수 있습니다. 예를 들어 다음 쿼리는 <ROOT> 요소를 반환합니다.

declare @x xml
set @x='<ROOT>Hello</ROOT>'
select @x.query('/ROOT[string-length()=5]')

이 항목에서는 AdventureWorks 데이터베이스의 다양한 xml 유형 열에 저장된 XML 인스턴스에 대한 XQuery 예를 제공합니다. 이러한 각 열에 대한 개요는 AdventureWorks 데이터베이스의 xml 데이터 형식 표시를 참조하십시오.

1. 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만을 생성합니다. 이 절에서는 query() 메서드(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>
...

2. string-length() XQuery 함수를 사용하여 보증 설명이 매우 짧은 제품 검색

보증 설명이 20자 미만인 제품의 경우 다음 쿼리는 제품 ID, 길이, 보증 설명 및 <Warranty> 요소 자체가 포함된 XML을 검색합니다.

보증은 제품 기능 중 하나입니다. <Features> 요소 다음에는 선택 항목인 <Warranty> 자식 요소가 옵니다.

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 루프를 지정합니다. <ProductDescription> 요소의 ProductModelID 특성을 검색하기 때문에 외부 FOR 루프는 필수입니다. 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>
...