Wpisz liczbę z dwoma miejscami po przecinku Serwer SQL


Odpowiedzi:


213

Spróbuj tego

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

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.


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


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


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


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

7

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

ROUND(column_name,decimals)

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

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

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;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.