Schreiben Sie eine Zahl mit zwei Dezimalstellen SQL Server

Antworten:

213

Versuche dies

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)
Chanoch
quelle
2
Wenn dies die Antwort vor 10 Jahren war, ist es nicht mehr. Diese Methode würde 10.11111 in 10.00 verwandeln.
Jonathon Cowley-Thom
Ich habe SELECT CONVERT (DECIMAL (10,2), 10.11111) ausprobiert. Es gab 10.11 das gleiche Ergebnis für SELECT CONVERT (DECIMAL (10,2), '10.11111') zurück, das in SQL Server 2008 R2
SKCS Kamal
70

Verwenden Sie Str()Funktion. Es werden drei Argumente benötigt (die Anzahl, die Anzahl der anzuzeigenden Gesamtzeichen und die Anzahl der anzuzeigenden Dezimalstellen

  Select Str(12345.6789, 12, 3)

zeigt an: '12345.679' (3 Leerzeichen, 5 Stellen 12345, ein Dezimalpunkt und drei Dezimalstellen (679). - Es wird gerundet, wenn es abgeschnitten werden muss (es sei denn, der ganzzahlige Teil ist in diesem Fall zu groß für die Gesamtgröße Stattdessen werden Sternchen angezeigt.)

für insgesamt 12 Zeichen, mit 3 rechts vom Dezimalpunkt.

Charles Bretana
quelle
1
it rounds if it has to truncate... es sei denn, der ganzzahlige Teil ist zu groß für die Gesamtgröße. In diesem Fall werden stattdessen Sternchen angezeigt. Dies wird in der Dokumentation für erwähntSTR . Hier ist ein Zitat von dieser Seite:STR(1223,2) truncates the result set to **.
Mark Byers
36

Im Allgemeinen können Sie die Genauigkeit einer Zahl in SQL definieren, indem Sie sie mit Parametern definieren. In den meisten Fällen ist dies NUMERIC(10,2)oder Decimal(10,2)- definiert eine Spalte als Zahl mit 10 Gesamtziffern mit einer Genauigkeit von 2 (Dezimalstellen).

Aus Gründen der Übersichtlichkeit bearbeitet

AAA
quelle
4
Es kann auch als DECIMAL (10, 2) deklariert werden.
jrcs3
10
Dies ist aus mehreren Gründen falsch. Es ist keine Zahl, es ist numerisch oder dezimal. Sie sagen, numerisch (10,2) erlaubt 10 Stellen vor dem Dezimalpunkt, was ebenfalls falsch ist. Die Zahl (10,2) ermöglicht 10 Gesamtziffern mit 2 Stellen nach dem Dezimalpunkt. Bereich = -99999999.99 bis 99999999.99
George Mastros
@G Mastros: Es scheint, dass Sie genau am Präzisionspunkt sind. Bei der tatsächlichen Benennung der Konvention ist in vielen SQL-Implementierungen NUMBER ein gültiger Typ. Obwohl ich zugeben werde, den Fall von sqlserver nicht zu kennen
AAA
@ GMastros kam, um dasselbe zu sagen. msdn.microsoft.com/en-us/library/aa258832%28v=sql.80%29.aspx
Joe
19

Diese Arbeit für mich und hält immer zweistellige Brüche

23.1 ==> 23.10

25,569 ==> 25,56

1 ==> 1,00

Cast(CONVERT(DECIMAL(10,2),Value1) as nvarchar) AS Value2

Code-Screenshot

Mohamed Ramadan
quelle
2
Probieren Sie die STR () - Funktion von Charles Bretana aus. Es funktioniert wie Ihre Formel, rundet jedoch Ihr 25.569-Beispiel ab.
JerryOL
15

So machen es die Kinder heute:

DECLARE @test DECIMAL(18,6) = 123.456789
SELECT FORMAT(@test, '##.##')

123,46

ClubbieTim
quelle
1
Die FORMAT-Funktion ist ab Version 2012 verfügbar.
user1263981
oder: SELECT FORMAT (@test, '. ##')
Java-Love
Wenn die Eingabedaten: waren, DECLARE @test DECIMAL(18,6) = 0.456789 wird SELECT FORMAT(@test, '##.##')Folgendes zurückgegeben: .46 Wie wird die führende Null angezeigt : 0.46?
Luisdev
Um eine führende 0 zu erhalten, versuchen Sie SELECT FORMAT (@test, '# 0.
##
14

Wenn Sie nur zwei Dezimalstellen benötigen, ist der einfachste Weg ..

SELECT CAST(12 AS DECIMAL(16,2))

ODER

SELECT CAST('12' AS DECIMAL(16,2))

Ausgabe

12.00
SonalPM
quelle
7

Wenn Sie die Zahl gut runden können, anstatt sie abzuschneiden, dann ist es nur:

ROUND(column_name,decimals)
Antoine
quelle
2

Versuche dies:

 declare @MyFloatVal float;

    set @MyFloatVal=(select convert(decimal(10, 2), 10.254000))

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount
Anil Chaudhary
quelle
0

Multiplizieren Sie den Wert, den Sie einfügen möchten (z. B. 2,99), mit 100

Fügen Sie dann die Division durch 100 des Ergebnisses ein und fügen Sie am Ende 0,01 hinzu:

299.01/100
SQL Master
quelle
0

Dies ermöglicht insgesamt 10 Stellen mit 2 Werten nach der Dezimalstelle. Dies bedeutet, dass der Wert vor der Dezimalstelle bis zu 8 Stellen und nach der Dezimalstelle 2 Stellen aufnehmen kann.

Geben Sie zur Validierung den Wert in die folgende Abfrage ein.

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
Kumar Vishwash
quelle