2017-06-14 10 views
1

T-SQL(MS-SQL)がデータ型キャストを処理する方法について、簡単に質問しました。私は以下のそれぞれの値を返すこれらの2つのクエリを持っていますが、なぜ私は2番目のものがこのように表示されているのだろうかと思っています。完全な価値は実際にキャプチャされていますか?問題の列のデータ型は浮動小数点型です。 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

ええ、でも、これはバックグラウンドでどうやって動くのか、もっと興味があります。なぜ、50文字が浮動小数点値全体を保持するのに十分な場合、最後の非小数点の桁から始まる "e +"のようなのでしょうか? –

+0

@@ versionとは何ですか? –

答えて

1

私はあなたが1Mという表記を見始めると思います。 (ちょうど私が今興味を持っているのでちょっとした実験をします)

しかし、問題を解決するには、Format()を使わなければならないかもしれません。これにより、小数点以下の桁数を変えることができます。他の数値に変換すると、小数点以下が表示されます。

フォーマット()気の利いた機能を持っていますが、それは、その性能のために知られていない

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 

今float値であった場合小数点第1位のみ

AsFloat  AsFormat 
2953432.8 2953432.8 
0

私は(お金などCOL)をキャストすることをお勧め

+0

float値が2953432.8の場合、キャストされたお金は2953432.80と表示されます...最後の10進数を確認してください –

+0

ええ、私はそれをフォーマットすることができますが、これらのクエリは何百もあります。 –

0

また、2がスケール

0

あるFORMAT(Value, 'F2')が、それはまた、STRを使用するように働く変換するために使用することができます。なぜそれが科学的表記法に切り替わるのか知ることは面白いですが、私はなぜそれがわかりません。

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