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.