V tomto článku navážu na předchozí příspěvek o Datových typech a proberu zde číselné datové typy a jejich vlastnosti. Díky volbě správného datového typu můžete ušetřit diskové kapacity. Stačí se zamyslet nad oborem hodnot sloupce, který chcete reprezentovat a pak zvolit správný typ.
V SQL Server rozeznáváme 2 kategorie Číslených datových typů z hlediska preciznosti vyjádření čísla.
- Přesné číselné datové typy (Exact numerics)
- Přibližný číselný datový typ (Approximate numerics)
Přesná čísla v SQL (Exact Numerics)
Jak název napovídá, jedná se o datový typ, který dokáže reprezentovat číslo zcela precizně = přesně. Tuto kategorii můžeme rozdělit na:
INTEGER data type
Jsou to celá čísla, seznam viz tabulka
Datový typ | Obor hodnot | Velikost |
BIGINT | -2^63 (-9,223,372,036,854,775,808) do 2^63-1 (9,223,372,036,854,775,807) | 8 Bytes |
INT | -2^31 (-2,147,483,648) do 2^31-1 (2,147,483,647) | 4 Bytes |
SMALLINT | -2^15 (-32,768) do 2^15-1 (32,767) | 2 Bytes |
TINYINT | 0 do 255 | 1 Byte |
NUMERIC data type
Vyznačují se tím, že musí být dopředu a pevně definován počet číslic a preciznost – počet desetinných míst. Např. DECIMAL (10,2) znamená, že číslo je s přesností na 2 desetinná místa a obsahuje 8 číslic před desetinnou čárkou = celkem 10 číslic.
Datový typ | Preciznost | Velikost je dle preciznosti |
NUMERIC | 1-38 | 1-9 = 5 Bytes; 10-19 = 9Bytes; 20-28 = 13 Bytes; 29-38 = 17 Bytes |
DECIMAL | 1-38 | 1-9 = 5 Bytes; 10-19 = 9Bytes; 20-28 = 13 Bytes; 29-38 = 17 Bytes |
Abych se přiznal příliš nevnímám rozdíl mezi těmito datovými typy, pokud by někdo věděl dejte komentář.
MONEY data type
Jsou určeny k reprezentování peněžních vyjádření nebo například vyjádření měnových kurzu. Hodí se všude tam, kde nám stačí preciznost na 4 desetinná místa
Datový typ | Obor hodnot | Velikost |
MONEY | -922,337,203,685,477.5808 do 922,337,203,685,477.5807 | 8 Bytes |
SMALLMONEY | – 214,748.3648 do 214,748.3647 | 4 Bytes |
Přibližná čísla v SQL (Exact Numerics)
Jak jsem již naznačil, tato skupina datových typů nereprezentuje preciznost čísel zcela přesně. Řadíme sem FLOAT(n) a REAL sql data type:
Datový typ | Obor hodnot | Velikost |
FLOAT | – 1.79E+308 do -2.23E-308, 0 a 2.23E-308 do 1.79E+308 | Záleží na “n” |
REAL | – 3.40E + 38 do -1.18E – 38, 0 a 1.18E – 38 do 3.40E + 38 | 4 Bytes |
Příklad nedostatečné preciznosti FLOAT datového typu
Pokud potřebujeme vyjádřit číslo precizně, měli bychom se přibižným datovým typům (FLOAT, REAL) vyhnout. Ukážu zde screenshot z knihy “Training Kit (Exam 70-461) Querying Microsoft SQL Server 2012”, který mě zaujal (mimochodem knihu doporučuji). Na tomto příkladu je vidět, že použitím Přibližného datového typu je v některých situacích nevhodné, nota bene pokud jde o čárové kódy 🙂
