T-SQL と Microsoft SQL Server を使用して、次のような 2 つの整数の間で除算を行うときに、10 進数の桁数を指定したいと思います。
select 1/3
それは現在 を返します0
。返してほしい0,33
。
何かのようなもの:
select round(1/3, -2)
しかし、それはうまくいきません。どうすれば望ましい結果を得ることができますか?
T-SQL と Microsoft SQL Server を使用して、次のような 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
これは、整数をパラメーターとして渡すときに役立ちます。
select x * 1.0 / y
使用する
select 1/3.0
これは仕事をします。
CAST
MySQL では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。
このトリックは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では最初に浮動小数点数に変換するか、1.00を掛けます。出力は浮動小数点数になります。ここでは、小数点以下2桁を考慮します。必要なものを選択できます。
あなたが(私と同じように)整数値の解決策を見つけるためにここに来た場合、ここに答えがあります:
CAST(9/2 AS UNSIGNED)
5 を返します