Číselné datové typy
Tento článek je psán za podpory webhostingu banan.cz, který Firebird plně podporuje.Číselné datové typy
Firebird podporuje tři typy číselných datových typů a to: celočíselné datové typy, čísla s pevnou desetinou čárkou a čísla s pohyblivou desetinou čárkou.Celočíselné datové typy
Všechny celočíselné datové typy jsou se znaménkem, Firebird nepodporuje celočíselné typy bez znaménka. S celými čísly lze provádět následující operace:1. Porovnávání: podle relačních operátorů (=,!=,<,>,>=,<=).
2. Aritmetické operace: sčítání, odčítání, násobení a dělení.
3. Konverze: při realizaci aritmetických operací nad různými datovými typy provádí Firebird konverzi mezi datovými typy INTEGER, FLOAT a CHAR. Při operacích, které porovnávají jiné, než číselné datové typy, provádí Firebird vždy nejprve konverzi těchto typů na číselný typ.
4. Třídění: Pomocí parametru ORDER BY příkazu SELECT lze čísla seřadit vzestupně nebo sestupně.
Následující tabulka uvádí celočíselné datové typy spolu jejich numerickými limity.
Název | Velikost | Rozsah |
---|---|---|
SMALLINT | 16b | –32,768 až 32,767 |
INTEGER | 32b | –2,147,483,648 až 2,147,483,647 |
BIGINT | 64b | –2^63 až 2^63–1 |
Příklad definice domény a tabulky:
CREATE DOMAIN dom1 AS INTEGER // definice domény
CREATE TABLE tab1 (sloup1 SMALLINT) //definice sloupce tabulky
Čísla s pevnou desetinou čárkou
Firebird podporuje dva číselné typy jazyka SQL pro práci s čísly s pevnou desetinou čárkou: DECIMAL a NUMERIC. Pro oba typy lze volitelně specifikovat rozsah a přesnost. Tyto datové typy bývají také označovány jako přesná čísla a jsou vhodná například pro práci s peněžními částkami.Rozsah (precision) – představuje celkový nebo maximální počet platných číslic, významných i desetinných, který sloupec tohoto typu může pojmout. Rozsah je specifikován v rozmezí číslic 1 až 18.
Přesnost (scale) – představuje počet desetinných míst. Přesnost je v rozsahu 0 až po definovaný rozsah (přesnost musí být menší nebo rovna rozsahu).
Syntaxe definice datových typů NUMERIC a DECIMAL
Prom1 NUMERIC (rozsah,přesnost);
Prom2 DECIMAL (rozsah,přesnost);
Oba typy lze definovat bez přesnosti a rozsahu, pouze s rozsahem, nebo s rozsahem i přesností. Pokud není přesnost a rozsah definovány, je položka definována s rozsahem 9 a přesností 0. Rozdíl mezi oběma typy je v chápání definovaného rozsahu. U typu DECIMAL představuje rozsah minimální počet platných číslic, které musí datová položka pojmou. U typu NUMERIC představuje rozsah přesný počet platných číslic, jež datová položka pojme.
Firebird implementuje typy DECIMAL a NUMERIC jako tzv. škálovaná celá čísla. To znamená, že jsou tato čísla uložena jako celá čísla typu SMALLINT,INTEGER nebo BIGINT podle zvoleného rozsahu, viz. následující tabulka.
Rozsah | Uložení jako |
---|---|
DECIMAL rozsah 1-9 | INTEGER (32b) |
DECIMAL rozsah 10-18 | BIGINT (64b) |
NUMERIC rozsah 1-4 | SMALLINT (16b) |
NUMERIC rozsah 5-9 | INTEGER (32b) |
NUMERIC rozsah 10-18 | BIGINT (64b) |
Příklad definice domény a sloupce tabulky:
CREATE DOMAIN dom1 AS DECIMAL(15,2)
CREATE TABLE tab1 (COL1 NUMERIC(5));
Čísla s pohyblivou desetinnou čárkou
Firebird poskytuje dva číselné typy pro práci s pohyblivou desetinnou čárkou, které se liší pouze velikostí. Čísla s pohyblivou desetinnou čárkou použijte jen tehdy, bude-li se měnit počet desetinných míst, nebo pro vědecké účely. Tento typ čísel není vhodný pro přesné výpočty nebo pro uložení peněžních částek. Následující tabulka uvádí zmiňované datové typy spolu jejich numerickými limity.Název | Velikost | Rozsah |
---|---|---|
FLOAT | 32b | 1.175 * 10^-38 až 3.402 * 10^38 |
DOUBLE PRECISION | 64b | 2.225 * 10^-308 až 1.797 * 10^308 |
Rozsah čísel typu FLOAT a DOUBLE PRECISION je neměnný, přesnost pevná není a nelze ji kontrolovat. Pokud číslo daný rozsah překročí, je uloženo pouze přibližně a nejméně významné číslice jsou považovány za nulové. Datový typ FLOAT má rozsah 7 číslic, DOUBLE PRECISION má 15 platných čísel.
Příklad definice domény a sloupce tabulky:
CREATE DOMAIN dom1 AS DOUBLE PRECISION
CREATE TABLE tab1 (COL1 FLOAT);
Autor: Robert Habrman