Schreiben Sie eine Zahl mit zwei Dezimalstellen SQL Server


Antworten:


213

Versuche dies

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)

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.


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


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


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


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


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

7

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

ROUND(column_name,decimals)

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

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

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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.