Freigeben über


string-length-Funktion (XQuery)

Gibt die Länge der Zeichenfolge in Zeichen zurück.

Syntax

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

Argumente

  • $arg
    Quellzeichenfolge, deren Länge berechnet werden soll.

Hinweise

Wenn der Wert von $arg eine leere Sequenz ist, wird ein xs:integer-Wert von 0 zurückgegeben.

Wenn der Wert ein 3-Byte-Unicode-Zeichen enthält, das durch zwei Ersatzzeichen dargestellt wird, zählt SQL Server die Ersatzzeichen einzeln.

Die string-length()-Funktion ohne Parameter kann nur in einem Prädikat verwendet werden. Die folgende Abfrage gibt z. B. das <ROOT>-Element zurück:

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

Beispiele:

Dieses Thema stellt XQuery-Beispiele für XML-Instanzen bereit, die in verschiedenen Spalten vom xml-Typ in der AdventureWorks2008R2-Datenbank gespeichert werden. Eine Übersicht über diese Spalten finden Sie unter Darstellung des xml-Datentyps in der AdventureWorks2008R2-Datenbank.

A. Verwenden der string-length()-Funktion von XQuery zum Abrufen von Produkten mit langen Zusammenfassungsbeschreibungen

Für Produkte, deren Zusammenfassungsbeschreibung größer als 50 Zeichen ist, ruft die folgende Abfrage die Produkt-ID, die Länge der Zusammenfassungsbeschreibung sowie die Zusammenfassung selbst (das <Summary>-Element) ab.

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;

Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:

  • Die Bedingung in der WHERE-Klausel ruft nur die Zeilen ab, für die die im XML-Dokument gespeicherte Zusammenfassung länger als 200 Zeichen ist. Sie verwendet die value()-Methode (XML-Datentyp).

  • Die SELECT-Klausel erstellt nur das von Ihnen gewünschte XML. Sie verwendet die query()-Methode (XML-Datentyp) zum Erstellen des XMLs und zum Angeben des erforderlichen XQuery-Ausdrucks zum Abrufen von Daten aus dem XML-Dokument.

Dies ist das Teilergebnis:

Ergebnis

-------------------

<Prod ProductID="19">

<LongSummary SummaryLength="214">Unser erstklassiges konkurrenzloses

Mountainbike. Zu den leistungsoptimierenden Merkmalen zählen der

innovative HL-Rahmen, die leichtgängige Vorderachse und

der Kraftschluss für jedes Gelände.

</LongSummary>

</Prod>

...

A. Verwenden der string-length()-Funktion von XQuery zum Abrufen von Produkten, deren Garantiebeschreibungen sehr kurz sind

Für Produkte, deren Garantiebeschreibung weniger als 20 Zeichen lang ist, ruft die folgende Abfrage XML ab, das die Produkt-ID, die Länge, die Garantiebeschreibung und das <Warranty>-Element selbst enthält.

Die Garantie ist eine der Produktfunktionen. Ein optionales untergeordnetes <Warranty>-Element folgt auf das <Features>-Element.

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;

Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:

  • pd und wm sind die Namespacepräfixe, die in dieser Abfrage verwendet werden. Sie geben den gleichen Namespace an, der in dem Dokument verwendet wird, das abgefragt wird.

  • Die XQuery gibt eine geschachtelte FOR-Schleife an. Die äußere FOR-Schleife ist erforderlich, weil Sie die ProductModelID-Attribute des <ProductDescription>-Elements abrufen möchten. Die innere FOR-Schleife ist erforderlich, weil Sie nur die Produkte abrufen möchten, die Garantiefunktionsbeschreibungen besitzen, die kürzer als 20 Zeichen sind.

Dies ist das Teilergebnis:

Ergebnis

-------------------------

<Prod ProductModelID="19">

<ShortFeature FeatureDescLength="15">

<wm:Warranty

xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">

<wm:WarrantyPeriod>3 Jahre</wm:WarrantyPeriod>

<wm:Description>Teile und Arbeit</wm:Description>

</wm:Warranty>

</ShortFeature>

</Prod>

...