Share via


Dize uzunluğu işlev (XQuery)

Karakter dize uzunluğunu döndürür.

Sözdizimi

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

Bağımsız değişkenler

  • $arg
    Kaynak dize uzunluğunu hesaplanması kullanmaktır.

Açıklamalar

Varsa değeri $arg boş bir sıra ise bir xs:integer 0 değeri döndürülür.

İki yedek karakterler tarafından temsil edilen 3 baytlı Unicode karakter değerini içeriyorsa, SQL Server yedek karakterleri tek tek sayılacak.

The string-length() without a parameter can only be used inside a predicate.Örneğin, aşağıdaki döndürür sorgu <ROOT> öğesi:

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

Örnekler

Bu konuda çeşitli içinde depolanan xml örnekleri karşı XQuery örnekler sağlar xml sütunları yazın AdventureWorks2008R2 veritabanı.Bir bakış bu sütunların her biri için bkz: XML veri türü temsili AdventureWorks2008R2 veritabanında.

A.dize-length() XQuery kullanarak işlev uzun Özet açıklamaları ürünleriyle almak için

Özet açıklaması 50 karakterden daha uzun olan ürünler için ürün kimliği, uzunluğu Özet açıklaması ve özeti kendisini, aşağıdaki sorgu alır <Summary> öğesi.

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;

Önceki sorgudan aşağıdakilere dikkat edin:

  • where yan tümce tümce tümcesinde koşul yalnızca xml belgesinde depolanan Özet açıklaması 200 karakterden uzun olduğu satırları alır.Kullandığı value() yöntem (xml veri türü).

  • select yan tümce tümce tümce yalnızca istediğiniz xml oluşturur.Kullandığı query() yöntem (xml veri türü) xml oluşturmak ve xml belgesinden veri almak için gerekli XQuery ifade belirtmek için.

Bu kısmi bir sonucudur:

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.dize-length() XQuery kullanarak işlev , garanti açıklamalardır çok kısa ürünleri almak için

Garanti açıklamaları, daha az 20 karakterden daha uzun olan ürünler için ürün kimliği, uzunluğu, garanti açıklama içeren xml aşağıdaki sorgu alır ve <Warranty> öğesinin kendisi.

Garanti, ürün özellikleri biridir.İsteğe bağlı bir <Warranty> alt öğe izleyen sonra <Features> öğesi.

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;

Önceki sorgudan aşağıdakilere dikkat edin:

  • pd ve wm olan bu sorguda kullanılan ad alaný önekleri.Bunlar, sorgulanan belgede kullanılan aynı ad alanları tanımlayın.

  • XQuery iç içe bir for döngüsü belirtir.Almak istediğiniz dış döngü için gerekir, çünkü ProductModelID özniteliklerini <ProductDescription> öğesi.İstediğiniz daha az 20 karakterden daha uzun olan garanti özellik açıklamaları olan ürünler için iç döngü için gereklidir.

Bu kısmi bir sonucudur:

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>

...