Wpisz liczbę z dwoma miejscami po przecinku Serwer SQL

Odpowiedzi:

213

Spróbuj tego

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)
Chanoch
źródło
2
Jeśli taka była odpowiedź 10 lat temu, to już nie jest. Ta metoda zmieniłaby 10.11111 w 10.00.
Jonathon Cowley-Thom
Próbowałem SELECT CONVERT (DECIMAL (10,2), 10,11111), zwróciło 10,11 ten sam wynik dla SELECT CONVERT (DECIMAL (10,2), '10.11111'), co było w Sql Server 2008 R2
SKCS Kamal
70

Użyj Str()funkcji. Zajmuje trzy argumenty (liczbę, całkowitą liczbę wyświetlanych znaków i liczbę wyświetlanych miejsc dziesiętnych

  Select Str(12345.6789, 12, 3)

wyświetla: '12345.679' (3 spacje, 5 cyfr 12345, kropka dziesiętna i trzy cyfry dziesiętne (679). - zaokrągla, jeśli ma zostać obcięty, (chyba że część całkowita jest zbyt duża dla całkowitego rozmiaru, w takim przypadku zamiast tego wyświetlane są gwiazdki).

łącznie 12 znaków, z 3 po prawej stronie przecinka.

Charles Bretana
źródło
1
it rounds if it has to truncate... chyba że część całkowita jest zbyt duża dla całkowitego rozmiaru, w takim przypadku zamiast tego wyświetlane są gwiazdki. Jest to wymienione w dokumentacji programuSTR . Oto cytat z tej strony:STR(1223,2) truncates the result set to **.
Mark Byers
36

Generalnie można zdefiniować dokładność liczby w języku SQL, definiując ją za pomocą parametrów. W większości przypadków będzie to NUMERIC(10,2)lub Decimal(10,2)- zdefiniuje kolumnę jako liczbę zawierającą łącznie 10 cyfr z dokładnością do 2 (miejsca dziesiętne).

Zmieniono dla jasności

AAA
źródło
4
Może być również zadeklarowany jako DECIMAL (10, 2).
jrcs3
10
Jest to złe z kilku powodów. To nie jest liczba, jest to liczba lub dziesiętna. Mówisz, że liczba (10,2) dopuszcza 10 miejsc przed przecinkiem, co również jest błędne. numeric (10,2) pozwala łącznie na 10 cyfr z 2 miejscami po przecinku. Zakres = -99999999,99 do 99999999,99
George Mastros
@G Mastros: Wygląda na to, że masz rację w punkcie dokładności. W przypadku faktycznego nazewnictwa konwencji w wielu implementacjach języka SQL NUMBER jest prawidłowym typem. Chociaż przyznam się, że nie znałem przypadku sqlserver
AAA
@GMastros przyszedł powiedzieć to samo. msdn.microsoft.com/en-us/library/aa258832%28v=sql.80%29.aspx
Joe
19

To działa dla mnie i zawsze zachowuje ułamki dwucyfrowe

23,1 ==> 23,10

25,569 ==> 25,56

1 ==> 1,00

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

Zrzut ekranu z kodem

Mohamed Ramadan
źródło
2
wypróbuj funkcję STR () z Charlesa Bretany powyżej. Działa jak twoja formuła, ale zaokrągli twój przykład 25.569.
JerryOL
15

Oto jak robią to dzisiaj dzieci:

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

123,46

ClubbieTim
źródło
1
Funkcja FORMAT jest dostępna od wersji 2012 r.
user1263981
lub: SELECT FORMAT (@test, '. ##')
java-love
Jeśli dane wejściowe to: DECLARE @test DECIMAL(18,6) = 0.456789 potem SELECT FORMAT(@test, '##.##')wraca: .46 Jak masz to, aby pokazać zero: 0.46?
luisdev
Aby uzyskać początkowe 0, wypróbuj SELECT FORMAT (@test, '# 0. ##')
ClubbieTim,
14

Jeśli potrzebujesz tylko dwóch miejsc po przecinku, najprostszym sposobem jest ...

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

LUB

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

Wynik

12.00
SonalPM
źródło
7

Jeśli możesz zaokrąglić liczbę zamiast skracać ją, to po prostu:

ROUND(column_name,decimals)
antoine
źródło
2

Spróbuj tego:

 declare @MyFloatVal float;

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

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount
Anil Chaudhary
źródło
0

Pomnóż wartość, którą chcesz wstawić (np. 2,99) przez 100

Następnie wstaw podział wyniku przez 100, dodając 0,01 na koniec:

299.01/100
Mistrz SQL
źródło
0

Umożliwi to łącznie 10 cyfr z 2 wartościami po przecinku. Oznacza to, że może pomieścić wartość przed przecinkiem do 8 cyfr i 2 po przecinku.

Aby sprawdzić poprawność, umieść wartość w następującym zapytaniu.

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
kumar vishwash
źródło