Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
A pontosság egy szám számjegyeinek száma. A skálázás a szám tizedespontjától jobbra lévő számjegyek száma. Például a szám 123.45 pontossága 5 és skálája 2.
Az SQL Serverben a numerikus és tizedes adattípusok alapértelmezett pontossága 38.
A numerikus adattípus hossza a szám tárolására használt bájtok száma. A varchar és a karakter esetében a karaktersztring hossza a bájtok száma. Nvarchar és nchar esetén a karaktersztring hossza a bájtpárok száma. A bináris, varbináris és kép adattípusok hossza a bájtok száma. Egy int adattípus például 10 számjegyet tartalmazhat, 4 bájtban tárolja, és nem fogadja el a tizedesvesszőket. A int adattípus pontossága 10, hossza 4, skálája pedig 0.
Két karakter, varchar, bináris vagy varbináris kifejezés összefűzésekor az eredményül kapott kifejezés hossza a két forráskifejezés hosszának összege, legfeljebb 8000 bájt.
Két nchar vagy nvarchar kifejezés összefűzésekor az eredményül kapott kifejezés hossza a két forráskifejezés hosszának összege, legfeljebb 4000 bájtpár.
Ha két azonos adattípusú, de eltérő hosszúságú
UNIONkifejezést hasonlít össze ,EXCEPTINTERSECTakkor az eredményként kapott hossz a két kifejezés közül a hosszabb.
Remarks
A numerikus adattípusok pontossága és skálája a decimális mellett rögzített. Ha egy aritmetikai operátor két azonos típusú kifejezéssel rendelkezik, az eredmény ugyanazzal az adattípussal rendelkezik, az adott típushoz definiált pontossággal és méretezéssel. Ha egy operátor két különböző numerikus adattípusú kifejezéssel rendelkezik, az adattípus-elsőbbséget élvező szabályok határozzák meg az eredmény adattípusát. Az eredmény az adattípusához definiált pontosságot és skálázást határozza meg.
Az alábbi táblázat azt határozza meg, hogyan számítja ki az eredmény pontosságát és skáláját, ha egy művelet eredménye decimális típusú. Az eredmény decimális , ha a következő esetekben:
- Mindkét kifejezés decimális.
- Az egyik kifejezés decimális , a másik pedig a decimálisnál alacsonyabb előzményű adattípus.
Az operandus kifejezések kifejezésként e1, pontossággal p1 és skálázással s1, valamint kifejezésként e2, pontosságtal p2 és skálázással vannak jelölve s2. A nem decimális kifejezések pontossága és skálázása a kifejezés adattípusához definiált pontosság és skálázás. A függvény max(a, b) azt jelzi, hogy a nagyobb értéket abvagy a . Hasonlóképpen, azt jelzi, min(a, b) hogy a kisebb vagy aba .
| Operation | Eredmény pontossága | Eredményskálázás 1 |
|---|---|---|
| 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 | KIVÉVE | INTERSECT } 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) |
1 Az eredmény pontossága és skálázása abszolút maximuma 38. Ha egy eredmény pontossága nagyobb, mint 38, akkor 38-ra csökken, és a megfelelő skálát csökkenti, hogy megakadályozza az eredmény szerves részének csonkolását. Bizonyos esetekben, például szorzás vagy osztás esetén a skálázási tényező nem csökken a tizedesvessző pontosságának fenntartása érdekében, bár a túlcsordulási hiba felmerülhet.
Emellett a kivonási műveletekhez olyan helyekre van szükségünk max(p1 - s1, p2 - s2) , ahol tárolhatjuk a tizedesjegyek szerves részét. Ha nincs elegendő hely a tárolásukhoz (azaz), a skálázás csökken, max(p1 - s1, p2 - s2) < min(38, precision) - scalehogy elegendő helyet biztosítson az integrál rész számára. Az eredményül kapott skálázás így min(precision, 38) - max(p1 - s1, p2 - s2)a törtrészt úgy kerekítheti, hogy illeszkedjen az eredményül kapott skálához.
A szorzási és osztási műveletekben olyan helyekre van szükségünk precision - scale , ahol az eredmény szerves részét tárolhatjuk. A skálázás a következő szabályokkal csökkenthető:
- Az eredményként kapott skálát a rendszer 32-nél kisebbre csökkenti
min(scale, 38 - (precision-scale)), mert nem lehet nagyobb, mint38 - (precision-scale). Ebben az esetben előfordulhat, hogy az eredmény kerekítve van. - A skálázás nem változik, ha 6-nál kisebb, és ha az integrált rész nagyobb, mint 32. Ebben az esetben túlcsordulási hiba merülhet fel, ha az nem fér el a decimális (38, skálázás) értékbe.
- A méretezés 6-ra van állítva, ha nagyobb, mint 6, és ha az integrált rész nagyobb, mint 32. Ebben az esetben az integrálrész és a skálázás is csökkenne, és az eredmény típusa decimális (38, 6). Az eredmény 7 tizedesjegyre kerekíthető, vagy túlcsordulási hiba lép fel, ha az integrált rész nem fér el 32 számjegybe.
Examples
A következő kifejezés kerekítés nélkül adja vissza az eredményt 0.00000090000000000 , mert az eredmény decimális (38, 17) közé is beilleszthető:
SELECT CAST(0.0000009000 AS DECIMAL(30, 20)) * CAST(1.0000000000 AS DECIMAL(30, 20)) [decimal(38, 17)];
Ebben az esetben a pontosság , 61a skálázás pedig az 40.
Az integrál rész (precision-scale = 21) kisebb, mint 32, ezért ez az eset az első eset a szorzási szabályokban, és a skálázás a min(scale, 38 - (precision-scale)) = min(40, 38 - (61-40)) = 17következőképpen van kiszámítva. Az eredmény típusa decimális(38, 17).
A következő kifejezés a 0.000001 értékre illesztett eredményt adja vissza:
SELECT CAST(0.0000009000 AS DECIMAL(30, 10)) * CAST(1.0000000000 AS DECIMAL(30, 10)) [decimal(38, 6)];
Ebben az esetben a pontosság , 61a skálázás pedig az 20.
A skálázás nagyobb, mint 6, az integrálrész (precision-scale = 41) pedig nagyobb, mint 32. Ez az eset a szorzási szabályok harmadik esete, az eredmény típusa pedig decimális (38, 6).