0
我正在嘗試使用Sql Server從XML檢索數據。使用Sql服務器從xml中檢索浮點值
獲取數據從SQL Server
DECLARE @salary float=null
DECLARE @xml xml
SET @xml = '<root><Salary>0.0</Salary></root>'
select
@salary = case when ISNULL(x.v.value('Salary[1]','nvarchar(100)'),'0') != '0' then x.v.value('Salary[1]','float') else 10000 end
from @xml.nodes('/root') x(v);
print @salary
當工資爲0.0的情況下狀態是否正常工作,因爲它是顯示輸出爲0
但是,當我們使用薪金爲0(不含小數),case語句正確工作並顯示99作爲輸出。
獲取數據從SQL Server
DECLARE @salary float=null
DECLARE @xml xml
SET @xml = '<root><Salary>0</Salary></root>'
select
@salary = case when ISNULL(x.v.value('Salary[1]','nvarchar(100)'),'0') != '0' then x.v.value('Salary[1]','float') else 10000 end
from @xml.nodes('/root') x(v);
print @salary
因爲它是一個 「近似」 數你永遠不應該使用貨幣FLOAT數據類型。更好地使用MONEY,SMALLMONEY,DECIMAL或NUMERIC ......也就是說,您的值基於FLOAT數據類型正確顯示。如果它後面沒有任何東西,Float將不顯示小數點。檢查這個結果... SELECT CAST(0 AS FLOAT),CAST(0.0 AS FLOAT),CAST(1.1 AS FLOAT); –
感謝您的信息。它只是一個演示來說明問題。 – Pearl
你的代碼似乎工作正常。你所描述的是FLOAT和REAL數據類型的標準行爲。更改數據類型,你會問題消失。 :) –