Udostępnij za pośrednictwem


Funkcje w węzłach — liczba

Dotyczy:programu SQL Server

Zwraca wartość liczbową węzła wskazanego przez $arg.

Składnia

  
fn:number() as xs:double?   
fn:number($arg as node()?) as xs:double?  

Argumenty

$arg
Węzeł, którego wartość zostanie zwrócona jako liczba.

Uwagi

Jeśli nie określono $arg, zwracana jest wartość liczbowa węzła kontekstu, przekonwertowana na dwukrotnie. W programie SQL Server fn:number() bez argumentu można używać tylko w kontekście predykatu zależnego od kontekstu. W szczególności można go używać tylko wewnątrz nawiasów kwadratowych ([ ]). Na przykład następujące wyrażenie zwraca element <ROOT>.

declare @x xml  
set @x='<ROOT>111</ROOT>'  
select @x.query('/ROOT[number()=111]')  

Jeśli wartość węzła nie jest prawidłową reprezentacją leksykatyczną prostego typu liczbowego, zgodnie z definicją w XML Schema Part 2:Datatypes, W3C Recommendation, funkcja zwraca pustą sekwencję. Funkcja NaN nie jest obsługiwana.

Przykłady

Ten temat zawiera przykłady zapytania XQuery dla wystąpień XML przechowywanych w różnych kolumnach xml typu w bazie danych AdventureWorks.

A. Używanie funkcji number() XQuery w celu pobrania wartości liczbowej atrybutu

Poniższe zapytanie pobiera wartość liczbową atrybutu rozmiaru partii z pierwszej lokalizacji centrum pracy w procesie produkcji modelu produktu 7.

SELECT ProductModelID, Instructions.query('  
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;  
     for $i in (//AWMI:root//AWMI:Location)[1]  
     return   
       <Location LocationID="{ ($i/@LocationID) }"   
                   LotSizeA="{  $i/@LotSize }"  
                   LotSizeB="{  number($i/@LotSize) }"  
                   LotSizeC="{ number($i/@LotSize) + 1 }" >  
  
       </Location>  
') as Result  
FROM Production.ProductModel  
WHERE ProductModelID=7  

Zwróć uwagę na następujące elementy z poprzedniego zapytania:

  • Funkcja number() nie jest wymagana, jak pokazano w zapytaniu dla atrybutu LotSizeA. Jest to funkcja XPath 1.0 i jest uwzględniana głównie ze względów zgodności z poprzednimi wersjami.

  • XQuery dla LotSizeB określa funkcję number i jest nadmiarowa.

  • Zapytanie LotSizeD ilustruje użycie wartości liczbowej w operacji arytmetycznej.

Jest to wynik:

ProductModelID   Result  
----------------------------------------------  
7              <Location LocationID="10"   
                         LotSizeA="100"   
                         LotSizeB="100"   
                         LotSizeC="101" />  

Ograniczenia implementacji

Są to ograniczenia:

  • Funkcja number() akceptuje tylko węzły. Nie akceptuje wartości niepodzielnych.

  • Gdy wartości nie mogą być zwracane jako liczba, funkcja number() zwraca pustą sekwencję zamiast funkcji NaN.

Zobacz też

funkcji XQuery względem typu danych XML