web-dev-qa-db-ja.com

2つの整数値を除算してfloat型の結果を得る方法

以下のような2つの整数の間の除算をするとき、私は10進数の桁数を指定したいです。

select 1/3

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

何かのようなもの:

select round(1/3, -2)

しかし、それはうまくいきません。どうすれば望ましい結果を達成できますか?

148
LaBracca

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

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

または

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

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

select 1 * 1.0 / 3

これは、整数をparamsとして渡すときに役立ちます。

select x * 1.0 / y
60
xiaowl

両方をキャストする必要はありません。除算の結果データ型は、常に データ型優先 の高いものになります。したがって、解決策は以下のようになります。

SELECT CAST(1 AS float) / 3

または

SELECT 1 / CAST(3 AS float)
37
M.S.

つかいます

select 1/3.0

これで仕事ができます。

24
stb

少し遅れるかもしれませんが、CASTからFLOATへのMySQLの使用は許可されていないため、 MySQL dev で説明したようにCAST(1 AS float)を実行しようとするとエラーが発生します。

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

(1 + 0.0)

次にROUNDを使用して、以下のように特定の小数桁数を実現します。

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

上記のSQLは、1を2で割り、0.500のように小数点以下3桁までのfloatを返します。

次の型にCASTを指定できます。binary、char、date、datetime、decimal、json、nchar、signed、time、および符号なし

10
Trouble Zero

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

SELECT 1.0*MyInt1/MyInt2

または

SELECT (1.0*MyInt1)/MyInt2
7
Troglo

これを使って

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

ここでは、このSQLでは最初にfloatに変換するか、または1.00を掛けます。出力はfloat型の数値になります。ここでは小数点以下第2位を考慮します。必要なものを選ぶことができます。

3
nazmul.3026

整数値の解を求めるために(私と同じように)ここに来たのであれば、これが答えです。

CAST(9/2 AS UNSIGNED)

5を返します

2
trojan