Aracılığıyla paylaş


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.

Ayrıca bkz.

Başvuru

Xml veri türü karşı XQuery işlevleri