Aracılığıyla paylaş


dize uzunluğu işlev (XQuery)

Dizenin uzunluğu karakter verir.

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.

Remarks

Değeri $arg boş bir sıra bir xs:Integer 0 değeri döndürdü.

Iki yedek karakterler tarafından temsil edilen 3 baytlı Unicode karakter değerini içeriyorsa SQL Server yedek karakterleri tek tek sayımını.

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

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

Örnekler

Bu konu, çeşitli içinde depolanan XML örnekleri karşı XQuery örnekler sağlar. XML türü sütunlarındaki AdventureWorks veritabanındaki.Konusuna genel bir bakış bu sütunların her biri için bkz: XML veri türü temsili AdventureWorks veritabanındaki.

C.Uzun Özet açıklamalarını ürünleri almak için dize-length() XQuery işlevini kullanma

Özet açıklaması 50 karakterden daha büyük ürünler için aşağıdaki sorgu, Özet açıklaması ve Özet, ürün KIMLIĞI alır <Summary> öğe.

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ümcesinde koşul, yalnızca XML belgesinde depolanan Özet açıklama 200 karakterden uzun satırları alır.Kullandığı Value() yöntem (XML veri türü).

  • SELECT yan tümce, yalnızca istediğiniz XML oluşturur.Kullandığı Query() yöntem (XML veri türü) XML oluşturma ve XML belgesinden veri almak için gerekli XQuery ifade belirtin.

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 işlev, garanti çok kısa açıklamalardır ürünleri almak için kullanma

20'Den az karakter uzunluğunda, garanti açıklamalardır ürünler için aşağıdaki sorgu, ürün KIMLIĞI, uzunluk, garanti Açıklama içeren bir XML alır ve <Warranty> öğenin kendisi.

Garanti, ürün özellikleri biridir.Bir isteğe bağlı <Warranty> sonra alt öğe izleyen <Features> öğe.

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 and WM var. Bu sorguda kullanılan ad önekleriBunlar, sorgulanan belgede kullanılan aynı ad alanları tanımlayın.

  • Döngü IÇIN bir iç içe geçmiş XQuery belirtir.Almak istediğiniz dış döngü IÇIN gerekir, çünkü Productmodelıd <ProductDescription> öğenin özniteliklerini.Döngü IÇIN iç gerekir, çünkü daha az 20 karakterden uzun garanti özellik açıklamaları olan ürünler istediğiniz.

Bu kısmi kaynaklanır:

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