2017-06-14 62 views
1

我有關於T-SQL(MS-SQL)如何處理數據類型轉換一個簡單的問題。我有這兩個查詢返回下面指出各自的價值觀,但我不知道爲什麼:第二個顯示這種方式。實際被捕獲的全部價值是?所討論的列的數據類型是浮點數。只需要這些等於使用IF語句進行比較。MS-SQL類型轉換邏輯

查詢1:

SELECT SUM ([CS_EQ_SHPD]) as CS_EQ_SHPD 
FROM [Supplies_DB].DBO.[ITEM] 
LEFT JOIN [Supplies_DB].DBO.[BU] 
ON BU_# = Business_Unit 
WHERE FISC_WEEK = '49' AND FY17_Market = 'Southeast' 

返回值: 2953432.88

問題2:

SELECT CAST(SUM ([CS_EQ_SHPD]) AS NVARCHAR(50)) as CS_EQ_SHPD 
FROM [Supplies_DB].DBO.[ITEM] 
LEFT JOIN [Supplies_DB].DBO.[BU] 
ON BU_# = Business_Unit 
WHERE FISC_WEEK = '49' AND FY17_Market = 'Southeast' 

返回值: 2.95343e + 006

+0

含義你不想要符號,但仍然希望值作爲nvarchar(50),但看起來像2953432.88? –

+0

是啊,但我爲它是如何工作的背景更加好奇。就像爲什麼會這樣「E +」開始的最後一個非十進制數字時,50個字符比足以容納整個浮點值嗎? –

+0

什麼是@@版本? –

回答

1

我相信你會開始看到一個符號1​​MM。 (我會做一個小reasearch只是因爲我現在很感興趣)

然而,糾正你的問題,你可能需要使用格式()。這將允許可變的小數位數。轉換爲其他數值會強制顯示小數位數。

格式()有一些不錯的功能,但它不知道它的性能

Declare @V float = 2953432.88 

Select AsFloat = @V 
     ,AsFormat = format(@V,'#.#########') -- Is a string but you can cast as nvarchar(50) 

返回

AsFloat  AsFormat 
2953432.88 2953432.88 

現在,如果浮動值只有1位小數

AsFloat  AsFormat 
2953432.8 2953432.8 
0

我建議投(COL金錢)

+0

如果浮動值爲2953432.8,鑄造錢將顯示2953432.80 ...注意到最後一個小數 –

+0

是啊,我能格式化,但我有數百個這樣的查詢。 –

0

您還可以使用FORMAT(Value, 'F2')其中2是規模

0

要轉換它也可以使用STR。知道爲什麼它切換到科學記數法是很有趣的,我不知道爲什麼。

select LTRIM(STR(2953432.88,50,2))