我需要從數據類型float的一列中進行選擇,並將其作爲nvarchar插入到另一列中。將浮點數轉換或轉換爲nvarchar?
我試着投它:cast([Column_Name] as nvarchar(50))
結果是9.07235e+009
,而不是一個10位數字(電話號碼)。
是否有人知道如何正確投射或轉換這些數據?
我需要從數據類型float的一列中進行選擇,並將其作爲nvarchar插入到另一列中。將浮點數轉換或轉換爲nvarchar?
我試着投它:cast([Column_Name] as nvarchar(50))
結果是9.07235e+009
,而不是一個10位數字(電話號碼)。
是否有人知道如何正確投射或轉換這些數據?
如果您將電話號碼存儲在浮動類型的列中(這是一個壞主意),那麼它們大概都是整數,並且可以在投射到nvarchar之前轉換爲int。
所以不是:
select cast(cast(1234567890 as float) as nvarchar(50))
1.23457e+009
你可以使用:
select cast(cast(cast(1234567890 as float) as int) as nvarchar(50))
1234567890
在這些例子中,最裏面的cast(1234567890 as float)
到位,從相應的列中選擇一個值的使用。
我真的建議,你不存儲電話號碼在花車雖然!
如果電話號碼以零開頭會怎麼樣?
select cast(0100884555 as float)
100884555
哎呀!我們剛存儲了一個不正確的電話號碼...
算術溢出 – RichardTheKiwi 2011-02-03 02:01:22
確實如此,但如果您的手機號碼超過40億,您可以隨時使用bigint。無論如何,STR函數看起來像是一個更好的選項,在這個問題之前我不知道! – Coxy 2011-02-03 02:18:36
檢查STR。您需要類似SELECT STR([Column_Name],10,0)
**這是SQL Server解決方案,用於其他服務器檢查其文檔。
不要使用浮點數存儲定點,準確性要求的數據。 此示例顯示如何正確地將float轉換爲NVARCHAR(50),同時還說明了爲精度數據使用浮點數是不好主意。
create table #f ([Column_Name] float)
insert #f select 9072351234
insert #f select 907235123400000000000
select
cast([Column_Name] as nvarchar(50)),
--cast([Column_Name] as int), Arithmetic overflow
--cast([Column_Name] as bigint), Arithmetic overflow
CAST(LTRIM(STR([Column_Name],50)) AS NVARCHAR(50))
from #f
輸出
9.07235e+009 9072351234
9.07235e+020 907235123400000010000
您可能注意到,第二輸出與「10000」結束,即使我們試圖在表中存儲數據與「00000」結束。這是因爲float
數據類型具有固定數量的有效數字支持,這並沒有延伸到那麼遠。
DECLARE @MyFloat [浮子]
SET @MyFloat = 1000109360.050
SELECT REPLACE(RTRIM(REPLACE(REPLACE(RTRIM((REPLACE(CAST(CAST(@MyFloat爲十進制(38,18) )AS VARCHAR(max)),'0',''))),'','0'),'。','')),'','。')
即使電話號碼是一種「數字」,一般的經驗法則是,如果您計劃與他們進行某種計算,只能將數字存儲爲數字。如果您打算存儲的數字永遠不需要任何操作(除了更新或者這些行的某個內容之外),您應該將它們存儲爲某種類型的字符串。 – syllogism 2011-02-03 00:59:52