web-dev-qa-db-ja.com

SQL Serverクエリで整数を10進数に変換する方法は?

heightは、SQL Serverテーブルの整数型です。除算を行い、クエリで結果を10進数として取得したい:

Select (height/10) as HeightDecimal

HeightDecimalが整数でなくなるようにキャストするにはどうすればよいですか?ありがとう。

41
RJIGO
SELECT height/10.0 AS HeightDecimal FROM dbo.whatever;

特定の精度スケールが必要な場合は、次のように言います。

SELECT CONVERT(DECIMAL(16,4), height/10.0) AS HeightDecimal
  FROM dbo.whatever;
64
Aaron Bertrand
SELECT CAST(height AS DECIMAL(18,0)) / 10

編集:これは内部でどのように機能しますか?

結果のタイプは両方の引数のタイプと同じです。または、それらが異なる場合は、 データタイプ優先順位テーブル によって決定されます。したがって、どちらの引数も非整数にキャストできます。

DECIMAL(18,0)、またはDECIMALと同等に書くこともできますが、0のデフォルトのスケールは「小数点の右側に数字がない」ことを意味するため、整数型の一種です。そのため、さまざまな状況でのキャストは、整数への丸めに適している場合があります。これは、私たちが達成しようとしていることの反対です。

ただし、DECIMALにはすべてのルールがあります。通常、これらは非整数ですが、常に正確な数値です。強制的に発生させたDECIMAL除算の結果のタイプ 特別に決定 、この場合はDECIMAL(29,11)です。したがって、除算の結果は11桁に丸められ、10で除算する必要はありませんが、3で除算すると丸めが観察可能になります。左側のオペランドのスケールを操作することで、丸めの量を制御できます。また、式全体の周りに別のROUNDまたはCAST演算を配置することにより、さらに多くを丸めることができます。

同一のメカニズムが、受け入れられた回答のよりシンプルで優れたソリューションを管理します。

  SELECT height / 10.0

この場合、除数のタイプはDECIMAL(3,1)で、結果のタイプはDECIMAL(17,6)です。 3で割ってみて、丸めの違いを観察してください。

精度とスケールに関するこのすべての話が嫌いで、ある時点からSQLサーバーに古き良き倍精度浮動小数点演算のすべての計算を実行させたい場合は、それも強制できます。

SELECT height / CAST(10 AS FLOAT(53))

または同等にちょうど

SELECT height / CAST (10 AS FLOAT)
20
Jirka Hanika

Heightを小数としてキャストできます:

select cast(@height as decimal(10, 5))/10 as heightdecimal

または、除算する値に小数点を配置します:

declare @height int
set @height = 1023

select @height/10.0 as heightdecimal

sqlfiddle の例を参照してください

4
Taryn
select cast (height as decimal)/10 as HeightDecimal
2
Dewfy