以下のような2つの整数の間の除算をするとき、私は10進数の桁数を指定したいです。
select 1/3
それは現在0
を返します。 0,33
を返してほしいのですが。
何かのようなもの:
select round(1/3, -2)
しかし、それはうまくいきません。どうすれば望ましい結果を達成できますか?
定数を探しているならstbとxiowlからの提案は大丈夫です。整数である既存のフィールドまたはパラメータを使用する必要がある場合は、まずそれらをfloat型にキャストできます。
SELECT CAST(1 AS float) / CAST(3 AS float)
または
SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
SQL Serverは整数除算を実行するからです。これを試して:
select 1 * 1.0 / 3
これは、整数をparamsとして渡すときに役立ちます。
select x * 1.0 / y
両方をキャストする必要はありません。除算の結果データ型は、常に データ型優先 の高いものになります。したがって、解決策は以下のようになります。
SELECT CAST(1 AS float) / 3
または
SELECT 1 / CAST(3 AS float)
つかいます
select 1/3.0
これで仕事ができます。
少し遅れるかもしれませんが、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、および符号なし。
このトリックはSQL Serverで機能し、短くなっているようです(以前の回答に基づく)。
SELECT 1.0*MyInt1/MyInt2
または
SELECT (1.0*MyInt1)/MyInt2
select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result
ここでは、このSQLでは最初にfloatに変換するか、または1.00を掛けます。出力はfloat型の数値になります。ここでは小数点以下第2位を考慮します。必要なものを選ぶことができます。
整数値の解を求めるために(私と同じように)ここに来たのであれば、これが答えです。
CAST(9/2 AS UNSIGNED)
5を返します