Oto trzy opcje konwersji liczby całkowitej na wartość dziesiętną w SQL Server przy użyciu T-SQL.
CAST()
Funkcja
CAST()
funkcja konwertuje wyrażenie jednego typu danych na inny:
SELECT CAST(275 AS DECIMAL(5, 2));
Wynik:
275.00
W tym przykładzie przekonwertowaliśmy liczbę całkowitą (275
) do wartości dziesiętnej z dokładnością 5
i z 2
miejsca dziesiętne.
Dziesiętny i numeryczny są synonimami i mogą być używane zamiennie. Dlatego możemy dostosować nasz przykład w następujący sposób, aby osiągnąć ten sam wynik:
SELECT CAST(275 AS NUMERIC(5, 2));
Wynik:
275.00
Ważne jest, aby pamiętać, aby dostosować precyzję zgodnie z wymaganiami:
SELECT CAST(18301275 AS DECIMAL(10, 2));
Wynik:
18301275.00
Jeśli argument precyzji nie jest wystarczająco duży, pojawia się błąd:
SELECT CAST(18301275 AS DECIMAL(9, 2));
Wynik:
Msg 8115, Level 16, State 8, Line 1 Arithmetic overflow error converting int to data type numeric.
CONVERT()
Funkcja
CONVERT()
funkcja robi to samo co CAST()
, z wyjątkiem nieco innej składni:
SELECT CONVERT(DECIMAL(5, 2), 275);
Wynik:
275.00
Użyj operatora arytmetycznego
Inną opcją jest użycie operatora arytmetycznego, takiego jak operator mnożenia:
SELECT 275 * 1.00;
Wynik:
275.00
W tym przykładzie mnożymy liczbę całkowitą przez 1.00
.
W SQL Server, gdy operator łączy wyrażenia różnych typów danych, typ danych o niższym priorytecie jest najpierw konwertowany na typ danych o wyższym priorytecie. Operacja następnie zwraca typ danych argumentu o wyższym priorytecie.
W SQL Server liczba dziesiętna ma wyższy priorytet niż liczba całkowita.
Mnożąc ją przez 1,00 nie zmieniamy części całkowitej. Po prostu konwertujemy to na dziesiętne i dodajemy część ułamkową.
Zobacz Pierwszeństwo typów danych w SQL Server, aby uzyskać listę typów danych w porządku pierwszeństwa.