T-SQLを使用して2つの整数値を除算して浮動小数点の結果を取得する方法


172

T-SQLとMicrosoft SQL Serverを使用して、次のように2つの整数間で除算を行う場合、10進数の桁数を指定したいと思います。

select 1/3

現在はそれが返されます0。返品をお願いし0,33ます。

何かのようなもの:

select round(1/3, -2)

しかし、それはうまくいきません。どうすれば望ましい結果を得ることができますか?


3
1.0 / 3を試しましたか?
ティロ2012

私が得た答えは十分以上です
LaBracca '30 / 07/30

回答:


276

定数を探している場合、stbとxiowlからの提案は問題ありません。整数である既存のフィールドまたはパラメーターを使用する必要がある場合は、最初に浮動小数点数にキャストできます。

SELECT CAST(1 AS float) / CAST(3 AS float)

または

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)

または、10進数の結果が必要な場合は、10進数としてキャストできます。
Tim

30
SELECT 1.0 * MyInt1 / MyInt2
Troglo

@TroubleZero for MySQLの使用decimal
itsazzad 2016

どうもありがとう、あなたは私の日を救った。CAST(7/3 AS float)を試しましたが、再び2を返しました。だからキャスト数は私の問題を解決しました。
YasinYörük2016

3
被除数と除数の両方をキャストする必要はありません。@ MSの回答を参照してくださいstackoverflow.com/a/30639343/2866644
robotik

69

SQL Serverは整数除算を実行するためです。これを試して:

select 1 * 1.0 / 3

これは整数をパラメータとして渡すときに役立ちます。

select x * 1.0 / y

1
ゼロを省略することもできます。
ジョン

43

両方をキャストする必要はありません。部門の結果データ型は常に、より高いデータ型の優先順位を持つものです。したがって、解決策は次のとおりです。

SELECT CAST(1 AS float) / 3

または

SELECT 1 / CAST(3 AS float)

27

使用する

select 1/3.0

これでうまくいきます。


13

MySQL でのCASTing FLOATは許可されておらずCAST(1 AS float)MySQL devで述べられているようにしようとするとエラーが発生することを理解しています

これの回避策は簡単です。するだけ

(1 + 0.0)

次にROUND、次のような特定の小数点以下の桁数を達成するために使用します

ROUND((1+0.0)/(2+0.0), 3)

上記のSQLは、1を2で除算し、浮動小数点数を小数点以下3桁に返します0.500

ワン缶CAST:次のタイプのバイナリ、文字、日付、日時、小数、JSON、nchar型、署名、時間、および符号なし


3
MySQLはを許可しますがCAST、へのキャストを許可しませんFLOATDECIMAL代わりにキャストしてください。たとえば、stackoverflow.com / questions / 7368163 /…を参照してください。
markusk 2017

7

このトリックはSQL Serverで機能し、より短いように見えます(以前の回答に基づく)

SELECT 1.0*MyInt1/MyInt2

または:

SELECT (1.0*MyInt1)/MyInt2

2
私はこれが一番好きで、パーセンテージの計算にも見栄えがしました:SELECT 100.0 * @Elapsed / @Total
EliSherer

3

これを使って

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

ここで、このSQLでは、最初に浮動小数点数に変換するか、1.00で乗算します。出力は浮動小数点数になります。ここでは、小数点以下2桁を考慮します。必要なものを選択できます。


2

あなたがここに来て(ちょうど私のように)整数値の解決策を見つけたなら、ここに答えがあります:

CAST(9/2 AS UNSIGNED)

5を返します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.