2017-06-14 41 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))