226

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

select 1/3

それは現在 を返します0。返してほしい0,33

何かのようなもの:

select round(1/3, -2)

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

4

8 に答える 8

352

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

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

また

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
于 2012-07-30T12:05:44.533 に答える
82

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

select 1 * 1.0 / 3

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

select x * 1.0 / y
于 2012-07-30T09:55:53.733 に答える
31

使用する

select 1/3.0

これは仕事をします。

于 2012-07-30T09:55:21.117 に答える
16

CASTMySQL ではing toが許可されておらず、 MySQL devに記載されているようにFLOATしようとするとエラーが発生することを理解しています。CAST(1 AS float)

これに対する回避策は簡単です。やるだけ

(1 + 0.0)

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

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

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

次の型を指定できCASTます: binary、char、date、datetime、decimal、json、nchar、signed、time、およびunsigned

于 2016-01-24T09:41:45.237 に答える
9

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

SELECT 1.0*MyInt1/MyInt2

または:

SELECT (1.0*MyInt1)/MyInt2
于 2015-02-11T15:32:27.793 に答える
3

これを使って

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

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

于 2017-02-13T04:22:44.470 に答える
2

あなたが(私と同じように)整数値の解決策を見つけるためにここに来た場合、ここに答えがあります:

CAST(9/2 AS UNSIGNED)

5 を返します

于 2017-03-08T10:33:21.340 に答える