Używając T-SQL i Microsoft SQL Server, chciałbym określić liczbę cyfr dziesiętnych, gdy wykonuję podział między 2 liczbami całkowitymi, takimi jak:
select 1/3
To obecnie powraca 0
. Chciałbym, żeby wrócił 0,33
.
Coś jak:
select round(1/3, -2)
Ale to nie działa. Jak mogę osiągnąć pożądany efekt?
sql-server
sql-server-2008
division
rounding
LaBracca
źródło
źródło
Odpowiedzi:
Sugestie od stb i xiowl są w porządku, jeśli szukasz stałej. Jeśli chcesz użyć istniejących pól lub parametrów, które są liczbami całkowitymi, możesz najpierw rzutować je na liczby zmiennoprzecinkowe:
lub
źródło
decimal
Ponieważ SQL Server wykonuje dzielenie liczb całkowitych. Spróbuj tego:
Jest to przydatne, gdy przekazujesz liczby całkowite jako parametry.
źródło
Nie trzeba rzucać ich obu. Typ danych wyniku dla podziału jest zawsze taki, który ma wyższy priorytet typu danych . Zatem rozwiązanie musi być:
lub
źródło
posługiwać się
To wystarczy.
źródło
Rozumiem, że
CAST
przejście doFLOAT
nie jest dozwolone w MySQL i spowoduje wyświetlenie błędu, gdy spróbujesz,CAST(1 AS float)
jak podano w MySQL dev .Obejście tego problemu jest proste. Po prostu zrób
Następnie użyj,
ROUND
aby uzyskać określoną liczbę miejsc dziesiętnych, takich jakPowyższy kod SQL dzieli 1 na 2 i zwraca liczbę zmiennoprzecinkową do 3 miejsc po przecinku, tak jak by to było
0.500
.Można
CAST
do następujących typów: binary, char, date, datetime, decimal, json, nchar, signed, time i unsigned .źródło
CAST
, po prostu nie pozwala na przesyłanieFLOAT
.DECIMAL
Zamiast tego przesyłaj do . Zobacz np . Stackoverflow.com/questions/7368163/… .Wygląda na to, że ta sztuczka działa w SQL Server i jest krótsza (na podstawie poprzednich odpowiedzi)
Lub:
źródło
SELECT 100.0 * @Elapsed / @Total
Użyj tego
select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result
Tutaj w tym sql najpierw przekonwertuj na liczbę zmiennoprzecinkową lub pomnóż przez 1,00. Który wynik będzie liczbą zmiennoprzecinkową. Tutaj rozważam 2 miejsca dziesiętne. Możesz wybrać to, czego potrzebujesz.
źródło
Jeśli przyszedłeś tutaj (tak jak ja), aby znaleźć rozwiązanie dla wartości całkowitej , oto odpowiedź:
zwraca 5
źródło