Sayı işlev (XQuery)
Sayısal bir değer tarafından belirtilen düğümü döndürür $arg.
Sözdizimi
fn:number() as xs:double?
fn:number($arg as node()?) as xs:double?
Bağımsız değişkenler
- $arg
Düğüm değeri sayı olarak iade edilecektir.
Açıklamalar
Eğer $argolduğu belirtilmemiş, dönüştürülmüş bir çift için düğümü, sayısal bir değer döndürdü. SQL Server, fn:number() olmadan bağımsız değişken yalnızca içerik bağımlı yüklemi içeriğinde kullanılabilir. Özellikle, o sadece ayraçlar ([]) içinde kullanılabilir. Örneğin, aşağıdaki deyim döndürür <ROOT> öğesi.
declare @x xml
set @x='<ROOT>111</ROOT>'
select @x.query('/ROOT[number()=111]')
declare @x xml
set @x='<ROOT>111</ROOT>'
select @x.query('/ROOT[number()=111]')
Düğüm değeri sayısal basit türü, geçerli bir sözlü gösterimini tanımlandığı gibi değilse xml Şeması bölümü 2:Datatypes, W3C önerisi, işlev boş sırası döndürür. NaN desteklenmiyor.
Örnekler
Bu konu çeşitli depolanan xml örnekleri karşı XQuery örnekler sağlar xml AdventureWorks veritabanındaki sütunları yazın. Bu sütunlar genel bakış için bkz: DEL - xml Data Type Representation in the AdventureWorks2008R2 Database.
A.Bir özniteliğin sayısal değerini almak için number() XQuery işlevini kullanma
Aşağıdaki sorgu, ilk iş merkezi konumundan ürün modeli 7 üretim süreci içinde çok boyutu özniteliğin sayısal değerini alır.
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
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
Önceki sorgudan aşağıdakilere dikkat edin:
Number() işlevi gerekli değildir, için sorgu tarafından gösterildiği gibi LotSizeA özniteliği. Bu bir XPath 1.0 işlevi ve öncelikle geriye doğru uyumluluk nedenleriyle dahildir.
İçin XQuery LotSizeB sayı işlevi belirtir ve gereksizdir.
Sorgu için LotSizeD bir sayı değeri bir aritmetik işlem kullanımını göstermektedir.
Sonuç şudur:
ProductModelID Result
----------------------------------------------
7 <Location LocationID="10"
LotSizeA="100"
LotSizeB="100"
LotSizeC="101" />
ProductModelID Result
----------------------------------------------
7 <Location LocationID="10"
LotSizeA="100"
LotSizeB="100"
LotSizeC="101" />
Uygulama kısıtlamaları
Bu sınırlamalar şunlardır:
Number() işlevi yalnızca düğümler kabul eder. Atomik değerleri kabul etmez.
Değerleri sayı olarak, döndü number() işlevi NaN yerine boş sırası döndürür.