SQL Server schneidet Dezimalpunkte eines neu erstellten Felds in einer Ansicht ab

8

Ich habe eine Sicht in SQL Server, etwa so:

%Vor%

Das Ergebnis ist 1.967741 (Anmerkung 6 Dezimalpunkte) - & gt; decimal (38,6)

Ich versuche dasselbe in einem Taschenrechner, aber das Ergebnis ist 1.967741935483871xxxx

Ich möchte erzwingen, dass SQL Server genauere Ergebnisse zurückgibt, wie zum Beispiel decimal(38,16) Ich habe versucht, die offensichtlichen Dinge wie Casting, aber SQL Server verbessert nicht die Ausgabe Ich bekomme nur einige abschließende Nullen am Ende wie 1.9677410000

Gibt es eine Möglichkeit, SQL Server zu zwingen, das Ergebnis nicht zu kürzen oder genauer zu geben?

    
Chris 22.03.2011, 00:24
quelle

3 Antworten

15

Wenn Sie etwas wie decimal(38,16) wollen, dann müssen Sie die Eingaben und nicht die Ausgabe umwandeln, nachdem die Trunkierung bereits stattgefunden hat!

%Vor%

Gibt

zurück %Vor%

Überprüfen Sie den Datentyp

%Vor%

Gibt

zurück %Vor%

Bearbeiten

Dies ist nur ein zusätzlicher Link als Follow-up zu den Kommentaren hinzuzufügen. Die Regeln für decimal to decimal conversion werden in BOL beschrieben . Dieser Link enthält den folgenden Ausdruck

  

* Die Ergebnisgenauigkeit und die Skalierung haben ein absolutes Maximum von 38. Wenn a   Ergebnisgenauigkeit ist größer als 38,   die entsprechende Skala wird reduziert auf   verhindere den integralen Teil eines Ergebnisses   von abgeschnitten werden.

aber lässt es nicht genau angegeben, wie eine solche Kürzung durchgeführt wird. Dies ist hier dokumentiert .

    
Martin Smith 22.03.2011, 00:37
quelle
2

Dies ist ein kleiner Umweg, aber ich denke, es ist eine Anmerkung wert.

%Vor%

Diese Abfrage:

%Vor%

gibt zurück:

%Vor%     
Piotr Salaciak 22.03.2011 00:29
quelle
2

Das Literal 6.71 wird als numeric behandelt, das eine feste Genauigkeit hat. Da Sie Division durchführen, ändern Sie die Anzahl der Dezimalstellen, die Sie nicht verwenden möchten, wenn die Genauigkeit im Vordergrund steht. Wenn Sie Ihre Zahlen so behandeln möchten, als ob sie genau sind, müssen Sie den Nenner in Ihrer Abfrage mit einer größeren Genauigkeit in einen decimal -Datentyp umwandeln. Dies sollte für Sie funktionieren:

%Vor%     
mattmc3 22.03.2011 00:36
quelle

Tags und Links