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からの提案は問題ありません。整数である既存のフィールドまたはパラメーターを使用する必要がある場合は、最初に浮動小数点数にキャストできます。
SELECT CAST(1 AS float) / CAST(3 AS float)
または
SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)
decimal
両方をキャストする必要はありません。部門の結果データ型は常に、より高いデータ型の優先順位を持つものです。したがって、解決策は次のとおりです。
SELECT CAST(1 AS float) / 3
または
SELECT 1 / CAST(3 AS float)
MySQL でのCAST
ing 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型、署名、時間、および符号なし。
CAST
、へのキャストを許可しませんFLOAT
。DECIMAL
代わりにキャストしてください。たとえば、stackoverflow.com / questions / 7368163 /…を参照してください。
select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result
ここで、このSQLでは、最初に浮動小数点数に変換するか、1.00で乗算します。出力は浮動小数点数になります。ここでは、小数点以下2桁を考慮します。必要なものを選択できます。