Udostępnij za pośrednictwem


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

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

W SQL Server, domyślny maksymalny dokładności numeric i decimal typy danych to 38. We wcześniejszych wersjach SQL Server, maksymalną wartością domyślną jest 28.

Długość dla typu danych numerycznych jest liczba bajtów, które są używane do przechowywania liczby.Długość ciąg znaków lub typ danych Unicode jest to liczba znaków.Długość binary, varbinary, a image typy danych to liczba bajtów. Na przykład int Typ danych może zawierać do 10 cyfr, są przechowywane w 4 bajty i nie akceptuje separatora dziesiętnego. The int data type has a precision of 10, a length of 4, and a scale of 0.

Jeśli dwa char, varchar, binary, lub varbinary wyrażenie są tak łączone, długość wyrażenie wynikowy jest suma długości urządzenie źródłowe dwóch wyrażenie lub 8000 znaków, zależnie od tego, który jest mniejsza.

Jeśli dwa nchar lub nvarchar wyrażenie są tak łączone, długość wyrażenie wynikowy jest suma długości urządzenie źródłowe dwóch wyrażenie lub 4 000 znaków, zależnie od tego, który jest mniejsza.

Gdy dwa wyrażenia z takim samym typie danych, ale różne długości są porównywane za pomocą UNION, z wyjątkiem lub przecinają się, długość wynikowy jest maksymalna długość dwóch wyrażeń.

Precyzja i Skala typów danych liczbowych, oprócz decimal są stałe. Jeśli jest operator arytmetyczny dwóch wyrażeń tego samego typu, wynik ma ten sam typ precyzji i skali zdefiniowane dla danego typu danych.Jeżeli podmiot gospodarczy ma dwa wyrażenia zawierające różne liczbowych typów danych, zasady pierwszeństwa typu danych definiują typu danych wyniku.Wynik ma dokładność i Skala zdefiniowanego dla typu danych.

W poniższej tabela określa, w jaki sposób precyzji i skali wyniki są obliczane podczas wynik operacji jest typu decimal. W rezultacie decimal gdy jednej z następujących jest prawdziwe:

  • Oba wyrażenia są decimal.

  • Jest jedno wyrażenie decimal a drugi jest typ danych z niższy priorytet niż decimal.

Wyrażenia operand są oznaczone jako wyrażenie e1, p1 precyzji i skali s1 i e2 wyrażenia, z dokładnością p2 i skalować s2.Precyzja i skala dla dowolnego wyrażenie, która nie jest decimal jest to precyzji i skali zdefiniowanego dla typu danych 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, s1 p2 + 1)

MAX (6, s1 p2 + 1)

E1 {UNION | EXCEPT | PRZETNIJ} e2

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

MAX (s1, s2)

E1, e2 %

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

MAX (s1, s2)

* Z wyników precyzji i skali mają bezwzględne najwyżej 38.Jeżeli dokładność wyniku jest większa niż 38, odpowiedniej skali jest zmniejszone, tak aby uniemożliwić integralną częścią wyniku są obcinane.