Precyzja, skala i długość (Transact-SQL)

Dokładność jest liczbą cyfr w liczbie.Skala jest liczba cyfr po prawej stronie przecinka dziesiętnego w szeregu.Na przykład liczba 123.45 ma dokładność 5 i skali 2.

W SQL Server, domyślna precyzja maksymalna z numeric i decimal typów danych jest 38.W starszych wersjach SQL Server, Domyślna maksymalna wynosi 28.

Długość Typ danych numerycznych jest liczbą bajtów, które są używane do przechowywania liczby.Długość ciąg znaków lub typ danych Unicode jest liczba znaków.Długość dla binary, varbinary, i image typy danych to liczba bajtów.Na przykład int Typ danych może pomieścić 10 cyfr, przechowywane w 4 bajty i nie akceptuje przecinki dziesiętne.int Typ danych ma dokładność 10, długość 4 i o skali 0.

Po dwóch char, varchar, binary, lub varbinary wyrażeń są tak łączone, długość wynikowy wyrażenie jest suma długości wyrażeń dwa źródło lub 8000 znaków, przyjmując mniej.

Po dwóch nchar lub nvarchar wyrażeń są tak łączone, długość wynikowy wyrażenie jest suma długości wyrażeń dwa źródło lub 4 000 znaków, przyjmując mniej.

Porównywania dwóch wyrażeń ten sam typ danych, ale różne długości za pomocą Unii, z wyjątkiem lub PRZECIĘCIA, długość wynikowy jest maksymalna długość dwóch wyrażeń.

Precyzja i Skala typów danych liczbowych, oprócz decimal są rozwiązywane.Jeśli jest operator arytmetyczny ma dwa wyrażenia tego samego typu, wynik ma ten sam typ precyzji i skali zdefiniowane dla danego typu danych.Jeśli operator ma dwa wyrażenia zawierające różne liczbowe typy danych, zasady pierwszeństwa typu danych definiują typu danych wyniku.Wynik ma precyzji i skali dla jego typu danych.

Poniższa tabela Określa, jak precyzji i skali wyniki są obliczane podczas wynik operacji jest typu decimal.Wynik jest decimal gdy jest spełniony jeden z następujących:

  • Oba wyrażenia są decimal.

  • Jedno wyrażenie jest decimal , a drugi jest typ danych o niższym priorytecie niż decimal.

Wyrażenia operand oznaczonego jako e1 wyrażenie z p1 precyzji i skali s1 i e2 wyrażenie z p2 precyzji i skali s2.Precyzji i skali dla dowolnego wyrażenie nie jest decimal precyzji i skali zdefiniowanego dla typu danych w wyrażenie.

Operacja

Dokładność wyników

Wynikiem skali *

E1 + e2

MAX (s1, s2), max (p1-s1, p2 s2) + 1

MAX (s1, s2)

E1 - e2

MAX (s1, s2), max (p1-s1, p2 s2) + 1

MAX (s1, s2)

E1 * e2

P1, p2 + 1

S1 + s2

E1 / e2

P1 - s1, s2 + max (6, p2 s1 + 1)

MAX (6, p2 s1 + 1)

E1 {Unii | Z WYJĄTKIEM | E2 PRZECIĘCIE}

MAX (s1, s2) + max (p1 s1, p2 s2)

MAX (s1, s2)

E1, e2 %

min (p1 s1, p2-s2) + max (s1, s2)

MAX (s1, s2)

* Wynik precyzji i skali mają bezwzględne maksimum 38.Gdy dokładność wyniku jest większa niż 38, odpowiadające skali jest zmniejszona do uniemożliwić jej integralną część wyników jest obcinany.