Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

18. diel - MS-SQL - Dátové typy podrobnejšie

V predchádzajúcej lekcii, MS-SQL krok za krokom: Transakcie, sme sa venovali transakciám.

Dnes sa v lekcii MS-SQL podrobnejšie pozrieme na dátové typy. Každý stĺpec, lokálna premenná alebo parameter má atribút, ktorý špecifikuje dátový typ. Dátové typy sú veľmi dôležitá súčasť návrhu tabuľky a je zložité ich po návrhu meniť, preto je dôležité venovať im pozornosť už v začiatkoch projektu.

Dátové typy môžeme rozdeliť do týchto skupín

  • Presné čísla
  • Približné čísla
  • Dátum a čas
  • Reťazce
  • Reťazce v unikóde
  • Binárne reťazce
  • Ostatné dátové typy

Presné čísla

Dátové typy reprezentujúce celé čísla bigint, int, smallint, tinyint:

Dátový typ Rozsah Pamäť potrebná na uloženie
bigint -263 až 263 8 bajtov
int -231 až 231 4 bajty
smallint -215 až 215 2 bajty
tinyint 0 až 255 1 bajt

Dátový tip reprezentujúci pravdu / nepravdu bit:

Dátový typ Rozsah Pamäť potrebná na uloženie
bit 0 až 1 1 bit

Pre dátový typ bit optimalizuje MS-SQL pamäť, ak je v tabuľke uložených 8 alebo menej polí s typom bit použije sa pamäť 1 bajt. Pre 9-17 polí 2 bajty atď.

Dátové typy reprezentujúce desatinné čísla sú decimal alebo numeric. Funkčne sú tieto dva typy rovnaké.

Deklarujú sa zápisom decimal (precision, scale), kde:

  • precision je maximálny počet číslic (miest) vľavo aj vpravo od desatinnej čiarky, môže nadobúdať hodnoty od 1 do 38,
  • scale je maximálny počet desatinných miest vpravo od desatinnej čiarky (teda presnosť desatinnej časti).

Pamäťová náročnosť dátového typu decimal podľa precision:

Dátový typ Precision Pamäť potrebná na uloženie
decimal 1-9 5 bajtov
decimal 10-19 9 bajtov
decimal 20-28 13 bajtov
decimal 29-38 17 bajtov

Dátové typy money a smallmoney predstavujú menu a vyznačujú sa tým, že majú stanovený maximálny počet desatinných miest na štyri desatinné miesta:

Dátový typ Rozsah Pamäť potrebná na uloženie
money -922,337,203,6­85,477.58 až 922,337,203,6­85,477.58 8 bajtů
smallmoney - 214,748.3648 to 214,748.3647 4 bajty

Ukážme si jednoduchý príklad:

CREATE TABLE [dbo].[Example1] (
    [Column1] [bigint] NULL,
    [Column2] [int] NULL,
    [Column3] [smallint] NULL,
    [Column4] [tinyint] NULL,
    [Column5] [bit] NULL,
    [Column6] [decimal](8, 3) NULL,
    [Column7] [money] NULL,
    [Column8] [smallmoney] NULL
) ON [PRIMARY];

GO

INSERT INTO [dbo].[Example1]
    ([Column1], [Column2], [Column3], [Column4],
     [Column5], [Column6], [Column7], [Column8])
VALUES
    (
        -12345678964125874,
        2147483647,
        32767,
        254,
        0,
        16.458,
        100,
        500
    );

Vo Visual Studiu sa nám zobrazí:

Data types - MS-SQL databázy krok za krokom

Približné čísla

Približné čísla používajú plávajúcu desatinnú čiarku, preto ich hodnota nemôže byť vždy vyjadrená presne.

Tieto čísla reprezentuje Float[(n)] kde n je počet bitov, ktoré sú použité na zápis mantisy pri vedeckom zápise čísel:

Dátový typ n Pamäť potrebná na uloženie
float(n) 1-24 4 bajty
float(n) 25-53 9 bajtov

Štandardné typy pre približné čísla:

Dátový typ Rozsah Pamäť potrebná na uloženie
float - 1.79E+308 až -2.23E-308, 0 a 2.23E-308 až 1.79E+308 8 bajtov
real - 3.40E + 38 až -1.18E - 38, 0 a 1.18E - 38 až 3.40E + 38 4 bajty

Tieto dátové typy deklarujeme v T-SQL takto:

CREATE TABLE [dbo].[Example2] (
    [Column1] [float] NULL,
    [Column2] [real] NULL);

Dátum a čas

Dátové typy reprezentujúce dátum alebo čas:

Dátový typ Rozsah Pamäť potrebná na uloženie
Date 0001-01-01 až 9999-12-31 3 bajty
Time 00:00:00.000 až 23:59:59.999 5 bajtov
Datetime Rozsah pre dátum 01.01.1753 až 31.12.9999 Rozsah pre čas 00:00:00 až 23:59:59.997 8 bajtov
Datetime2(n) Rozsah pre dátum 01.01.0001 až 31.12.9999 Rozsah pre čas 00:00:00 až 23:59:59.9999999 Podľa presnosti od 6 bajtov do 8 bajtov
Datetimeoffset Rozsah pre dátum 01.01.0001 až 31.12.9999 Rozsah pre čas 00:00:00 až 23:59:59.9999999 Rozsah pre časovú zónu -14:00 až +14:00 10 bajtov
Smalldatetime Rozsah pre dátum 01.01.1900 až 06.06.2079 Rozsah pre čas 00:00:00 až 23:59:00 4 bajty

Popíšme si v skratke ich význam:

  • Date – používa sa na uloženie dátumu.
  • Time – používa sa na uloženie času.
  • Datetime – používa sa na uloženie kombinácie dátumu a času.
  • Datetime2(n) – používa sa na uloženie kombinácie dátumu a času, je možné použiť presnosť a tým ovplyvniť potrebnú pamäť.
  • Datetimeoffset – používa sa na uloženie kombinácie dátumu a času vrátane časovej zóny.
  • Smalldatetime – používa sa na uloženie kombinácie dátumu a času dňa, sekundy sú vždy nula, desatiny sekúnd nie sú použité.

Príklad:

CREATE TABLE [dbo].[Example3] (
    [Column1] [date] NULL,
    [Column2] [time](7) NULL,
    [Column3] [datetime]NULL,
    [Column4] [datetime2](7) NULL,
    [Column5] [datetimeoffset](7) NULL,
    [Column6] [smalldatetime] NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Example3]
           ([Column1]
           ,[Column2]
           ,[Column3]
           ,[Column4]
           ,[Column5]
           ,[Column6])
     VALUES
           ('2016-05-14',
           '17:15:21.5',
           '2016-07-15 13:22:42.214',
           '2016-08-22 14:25:13.8856625',
           '2016-05-13 12:22:05.22 +8:00',
           '2016-05-18 12:58');

Vo Visual Studiu sa nám zobrazí:

Data types 2 - MS-SQL databázy krok za krokom

Reťazce

Pre textové reťazce máme k dispozícii:

Dátový typ Rozsah Pamäť potrebná na uloženie
Char(n) Pevná dĺžka, n 1 až 8000 n bajtov (bude rezervované miesto)
Varchar( n/max) Variabilná dĺžka, n 1 až 8000, max indikuje maximálnu možnú dĺžku n bajtu + 2 max = 231−1 bajtov

Príklad:

CREATE TABLE [dbo].[Example4] (
    [Column1] [char](10) NULL,
    [Column2] [varchar](10) NULL,
    [Column3] [varchar] (max) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Example4]
           ([Column1]
           ,[Column2]
           ,[Column3]
           )
     VALUES
           ('abcdefghij',
           'abc',
           'abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcde
           fghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghija
           bcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefgh
           ijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij'
           );

Vo Visual Studiu sa nám zobrazí:

Data types 3 - MS-SQL databázy krok za krokom

Reťazce s podporou unikódu

Ďalšie dva typy s používajú na ukladanie reťazcov v unikóde, tzn. na uloženie každého znaku budú použité dva bajty. Je možné tak ukladať národné znaky, napríklad diakritiku:

Dátový typ Rozsah Pamäť potrebná na uloženie
nchar(n) Pevná dĺžka, n 1 až 4000 n x 2 bajty (bude rezervované miesto)
nvarchar( n/max) Variabilná dĺžka, n 1 až 4000, max indikuje maximálnu možnú dĺžku n x 2 bajtu + 2 max = 231−1 bajtov

Príklad:

CREATE TABLE [dbo].[Example5] (
    [Column1] [nchar] (10) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Example5]
           ([Column1])
     VALUES
           ('ěščřžýáíé');

Výstup:

Data types 4 - MS-SQL databázy krok za krokom

Binárne reťazce

Na ukladanie binárnych súborov, napríklad obrázkov, priamo do databázy sa používa:

Dátový typ Rozsah Pamäť potrebná na uloženie
Binary (n) Pevná dĺžka, n 1 až 8000 n bajtov (bude rezervované miesto)
varbinary( n/max) Variabilná dĺžka, n 1 až 8000, max indikuje maximálnu možnú dĺžku n x 2 bajtu + 2 max = 231−1 bajtov

Príklad:

CREATE TABLE [dbo].[Example6] (
    [Column1] [binary](500) NULL,
    [Column2] [varbinary](500) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Example6]
           ([Column1],[Column2])
     VALUES
           (convert(binary, 'sdkaldjwi235486werfsfg3125h3ouršáhkjíěéýřžéščínřvéěínřzcfdgdfhb654'),
            convert(binary, 'sdkaldjwi235486werfsfg3125h3ouršáhkjíěéýřžéščínřvéěínřzcfdgdfhb654')
           );

Výstup:

Data types 5 - MS-SQL databázy krok za krokom

Ostatné dátové typy

Spomeňme ešte posledné dva dátové typy T-SQL:

  • Timestamp – je dátový typ, ktorý generuje jedinečné binárne číslo, ktoré sa používa na rozlíšenie verzie riadkov "rowversion". Tento dátový typ neukladá dátum a čas! Na uloženie dátumu a času používajte datetime2. V pamäti zaberá 8 bajtov.
  • Uniqueidentifier – je dátový typ, ktorý v spojení napríklad s funkciou NEWID() vygeneruje unikátny identifikátor. V pamäti zaberá 16 bajtov.

Príklad:

CREATE TABLE [dbo].[Example7] (
    [Column1] [uniqueidentifier] NULL DEFAULT (newid()),
    [Column2] [Timestamp],
    [Column3] [char] (3)
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Example7]
           ([Column3])
     VALUES
           ('abc');

Výstup:

Data types 6 - MS-SQL databázy krok za krokom

V nasledujúcej lekcii, MS-SQL krok za krokom: Používatelia a oprávnenia, sa naučíme pracovať s používateľskými účtami. Naučíme sa ich vytvárať, mazať a prideľovať im oprávnenia.


 

Predchádzajúci článok
MS-SQL krok za krokom: Transakcie
Všetky články v sekcii
MS-SQL databázy krok za krokom
Preskočiť článok
(neodporúčame)
MS-SQL krok za krokom: Používatelia a oprávnenia
Článok pre vás napísal Ondřej Trnka
Avatar
Užívateľské hodnotenie:
17 hlasov
OT
Aktivity