Udostępnij przez


Funkcja długość ciąg (XQuery)

Zwraca długość ciąg znaków.

Składnia

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

Argumenty

  • $arg
    Ciąg źródłowy, którego długość ma zostać obliczona.

Uwagi

Jeśli wartość $arg jest pusta sekwencji, xs:integer zwracana jest wartość 0.

Jeśli wartość zawiera znak Unicode 3 bajtu, który jest reprezentowany przez dwa znaki Surogat, SQL Server będzie liczenie znaków Surogat indywidualnie.

ciąg-length() bez parametru może być używany tylko wewnątrz predykatu.Na przykład następujące kwerendy zwraca <ROOT> element:

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

Przykłady

W tym temacie przedstawiono przykłady XQuery przeciwko wystąpień XML przechowywanych w różnych xml wpisz kolumn w AdventureWorks2008R2 bazy danych.Przegląd tych kolumn, zobacz XML reprezentacji typu danych w bazie danych AdventureWorks2008R2.

A.Używanie funkcja XQuery ciąg-length() do pobierania produkty o długim zbiorcze opisy

Dla produktów, których skrócony opis jest większa niż 50 znaków, poniższa kwerenda pobiera identyfikator produktu, długość skrócony opis i podsumowania, <Summary> elementu.

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;

Poniższe z poprzedniej kwerendy:

  • Warunku w klauzula WHERE pobiera tylko wiersze, w których skrócony opis przechowywanym w dokumencie XML jest dłuższa niż 200 znaków.Używa value(), metoda (typ danych XML).

  • Klauzula SELECT konstrukcje tylko plik XML, który chcesz.Używa query(), metoda (typ danych XML) do skonstruowania XML i podać wyrażenie XQuery niezbędne do pobierania danych z dokumentem XML.

Jest to wynik częściowy:

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.Używanie funkcja XQuery ciąg-length() do pobierania produktów, których opisy gwarancji są bardzo krótkie

Dla produktów, których opisy gwarancji są mniej niż 20 znaków, poniższa kwerenda pobiera plik XML, który zawiera identyfikator produktu, długość, opis gwarancji i <Warranty> samego elementu.

Gwarancja jest jedną z funkcji produktu.Opcjonalny <Warranty> element podrzędność następuje po <Features> elementu.

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;

Poniższe z poprzedniej kwerendy:

  • Pd i wm są prefiksy obszarów nazw używanych w tej kwerendzie.Identyfikują one tych samych obszarów nazw używanych w dokumencie, którego dotyczy kwerenda.

  • XQuery określa zagnieżdżonej pętli FOR.Zewnętrzne dla pętli jest wymagane, ponieważ chcesz pobrać ProductModelID atrybuty <ProductDescription> element.Wewnętrzna Pętla FOR jest wymagane, ponieważ ma tylko produkty, które mają opisy funkcji gwarancji, które są mniej niż 20 znaków.

Jest to wynik częściowy:

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>

...

Zobacz także

Odwołanie