Frage

Warum wird die Select-Anweisung unten Rückkehr zwei verschiedene Werte?

declare @tempDec decimal
set @tempDec = 1.0 / (1.0 + 1.0)
select @tempDec, 1.0 / (1.0 + 1.0)
War es hilfreich?

Lösung

Das ist in Ordnung für Literale wie 1.0, aber wenn Sie die Daten aus Tabellenspalten sind ziehen, müssen Sie die erste bewerten Nummer in Ihrer Gleichung werfen / konvertieren:

convert(decimal, [col1]) / ([col2] + [col3])

-oder -

convert(decimal(15, 2), [col1]) / ([col2] + [col3])

Andere Tipps

ich von einem Kollegen fand heraus, so wie ich dies geschrieben.

Sie müssen die Standardgenauigkeit und Maßstab angeben.

Das funktioniert in diesem Szenario: deklarieren @tempDec dezimal (3,2)

Von MSDN:

dezimal [(p [, s])] und numerisch [(p [, s])] Feste Genauigkeit und Skalierung Zahlen. Wenn höchste Präzision verwendet wird, sind die gültigen Werte von - 10 ^ 38 + 1 bis 10 ^ 38 - 1. Die SQL-92 Synonyme für dezimal sind Dec und Dec (p, s). numerisch ist funktional äquivalent zu dezimal.

p (Präzision) Die maximale Anzahl der Dezimalstellen, die sowohl nach links und rechts von dem Dezimalpunkt gespeichert werden können. Die Genauigkeit muss ein Wert von 1 durch die maximale Genauigkeit von 38 sein Die Standardgenauigkeit ist 18.

s (Skala) Die maximale Anzahl der Dezimalstellen, die rechts von dem Komma gespeichert werden können. Waage muss ein Wert von 0 bis p sein. Scale kann nur angegeben werden, wenn Genauigkeit angegeben ist. Die Standard-Skala ist 0; also 0 <= s <= p. Maximale Speichergrößen variieren, bezogen auf die Genauigkeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top