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.