Поделиться через


Функции с узлами — number

Область применения: SQL Server

Возвращает числовое значение узла, указанного $arg.

Синтаксис

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

Аргументы

$arg
Узел, значение которого будет возвращено в виде числа.

Замечания

Если $arg не задано, возвращается числовое значение узла контекста, преобразованное в двойное. В SQL Server fn:number() без аргумента можно использовать только в контексте предиката, зависящей от контекста. Точнее, она может использоваться только внутри квадратных скобок ([ ]). Например, следующее выражение возвращает <ROOT> элемент.

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

Если значение узла не является допустимым лексическим представлением числового простого типа, как определено в части XML Schema 2:Datatypes, рекомендация W3C, функция возвращает пустую последовательность. Синтаксис NaN не поддерживается.

Примеры

В этом разделе приведены примеры XQuery для экземпляров XML, хранящихся в различных столбцах типов XML в базе данных AdventureWorks.

А. Использование функции number() языка XQuery для получения числового значения атрибута

В следующем запросе получается числовое значение атрибута, представляющего объем партии, производимого в первом цехе, участвующем в производственном процессе для модели продукта 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  

Обратите внимание на следующие данные из предыдущего запроса:

  • Функция number() не требуется, как показано в запросе для атрибута LotSizeA. Это функция языка XPath 1.0, и она включена в основном по причинам обратной совместимости;

  • XQuery для LotSizeB указывает функцию числа и является избыточной.

  • Запрос LotSizeD иллюстрирует использование числа значения в арифметической операции.

Результат:

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

Ограничения реализации

Существуют следующие ограничения:

  • Функция number() принимает только узлы. Она не принимает атомарных значений;

  • Если значения не могут быть возвращены в виде числа, функция number() возвращает пустую последовательность вместо NaN.

См. также

Функции XQuery для типа данных XML