Udostępnij za pośrednictwem


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

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

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.

Remarks

Jeśli wartość $arg jest sekwencją puste xs:Integerzwracana jest wartość 0.

Jeśli wartość zawiera znaku Unicode 3-bajtowe, które jest reprezentowany przez dwa znaki zastępcze, SQL Server będzie liczenie znaków surogatu indywidualnie.

The ciąg-length() without a parameter can only be used inside a predicate.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 przed przechowywane w różnych wystąpień XML XML typu kolumny bazy danych AdventureWorks.Aby uzyskać ogólne informacje o każdej z tych kolumn zobacz xml Data Type Representation in the AdventureWorks Database.

A.Używanie funkcja XQuery ciąg-length() do pobierania produktów z długo podsumowania opisy

W przypadku produkty, 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> element.

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

Pierwszy przycisk jest przyciskiem domyślnym.

  • Warunku w klauzula WHERE pobiera jedynie tych wierszy, w którym skrócony opis przechowywanym w dokumencie XML jest dłuższa niż 200 znaków.Korzysta on Metoda Value() (typ danych XML).

  • Klauzula SELECT tworzy tylko plik XML, który ma.Korzysta on Metoda Query() (typ danych XML) do skonstruowania XML i określić 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.Za pomocą funkcja XQuery ciąg-length() pobrać produkty, których opisy gwarancji są bardzo krótkie

Dla produktów, których opisy gwarancji są mniejsze niż 20 znaków, poniższa kwerenda pobiera XML zawierający identyfikator produktu, długość, opis gwarancji oraz <Warranty> samego elementu.

Gwarancja jest jedną z funkcji produktu.Opcjonalny <Warranty> element podrzędność następuje po <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

Pierwszy przycisk jest przyciskiem domyślnym.

  • Pd and Zm są używane w tej kwerendzie prefiksów obszaru nazw.Identyfikują one tych samych obszarów nazw używanych w dokumencie, który jest poszukiwanych.

  • Pętla FOR the XQuery Określa, zagnieżdżone.Zewnętrzne Pętla FOR jest to konieczne, ponieważ ma zostać pobrany ProductModelID atrybuty <ProductDescription> elementu.Wewnętrzne Pętla FOR jest to konieczne, ponieważ ma tylko tych produktów, które zawiera 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>
...