Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

V minulej lekcii, MS-SQL - Uložené procedúry , sme sa naučili používať uložené procedúry.

Dnes sa v MS-SQL tutoriálu pozrieme podrobnejšie na dátové typy. Každý stĺpec, lokálne 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ódu
  • binárne reťazca
  • Ostatné dátové typy

Presné čísla

Dátové typy reprezentujúci celé čísla "bigint", "int", "smallint", "tinyint".

dátový typ rozsah Pamäť potrebná pre uloženie
bigint -2 63 až 2 63 8 bajtov
int -2 31 až 2 31 4 bajty
smallint -2 15 až 2 15 2 bajty
tinyint 0 až 255 1 bajt
Dátový tip reprezentujúci pravdu / nepravdu "bit".
dátový typ rozsah Pamäť potrebná pre uloženie
bit 0 až 1 1 bit
Pre dátový typ bit optimalizuje MS-SQL pamäť, ak je v tabuľke uložené 8 alebo menej polí s typom bit použije sa pamäť 1 bajt. Pre 9-17 polí 2 bajty atď.

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

Deklarujú sa takto: decimal (precision, scale)

  • precision je maximálny počet desatinných 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
dátový typ Precision Pamäť potrebná pre 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 reprezentujú menu a vyznačujú sa tým, že majú len dve desatinné miesta.
dátový typ rozsah Pamäť potrebná pre uloženie
money -922,337,203,6­85,477.58 až 922,337,203,6­85,477.58 8 bajtov
smallmoney - 214,748.3648 to 214,748.3647 4 bajty
Príklad
CREATE TABLE [dbo].[Priklad1](
    [sloupec1] [bigint] NULL,
    [Sloupec2] [int] NULL,
    [Sloupec3] [smallint] NULL,
    [Sloupec4] [tinyint] NULL,
    [Sloupec5] [bit] NULL,
    [Sloupec6] [decimal](8, 3) NULL,
    [Sloupec7] [money] NULL,
    [Sloupec8] [smallmoney] NULL
) ON [PRIMARY]

GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec1],[Sloupec2],[Sloupec3],[Sloupec4]
           ,[Sloupec5],[Sloupec6],[Sloupec7],[Sloupec8])
     VALUES
           (
-12345678964125874,
2147483647,
32767,
254,
0,
16.458,
100,
500
)
MS-SQL databázy krok za krokom

Približná čísla

Približná čísla používajú plávajúcou desatinnou čiarku, preto nemôže byt vždy ich hodnota vyjadrená presne.

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

dátový typ n Pamäť potrebná pre 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á pre uloženie
float - 1.79 + 308 až -2.23E-308, 0 a 2.23-308 až 1.79 + 308 8 bajtov
real - 3.40 + 38 až -1.18E - 38, 0 a 1.18 - 38 až 3.40 + 38 4 bajty
Príklad
CREATE TABLE [dbo].[Priklad2](
    [Sloupec1] [float] NULL,
    [Sloupec2] [real] NULL)

Dátum a čas

Dátové typy reprezentujúci dátum alebo čas.

dátový typ rozsah Pamäť potrebná pre 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
- Date - používa sa pre uloženie dátumu
  • Time - používa sa pre uloženie času
  • Datetime - používa sa na uloženie kombinácie dátumu a času
  • Datetime2 (n) - používa sa pre uloženie kombinácie dátumu a času, je možné použiť presnosť na 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].[Priklad1](
    [sloupec1] [date] NULL,
    [Sloupec2] [time](7) NULL,
    [Sloupec3] [datetime]NULL,
    [Sloupec4] [datetime2](7) NULL,
    [Sloupec5] [datetimeoffset](7) NULL,
    [Sloupec6] [smalldatetime] NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec1]
           ,[Sloupec2]
           ,[Sloupec3]
           ,[Sloupec4]
           ,[Sloupec5]
           ,[Sloupec6])
     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' )
MS-SQL databázy krok za krokom

Reťazca

dátový typ rozsah Pamäť potrebná pre 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 = 2 31-1 bajtov
Príklad
CREATE TABLE [dbo].[Priklad1](
    [sloupec1] [char](10) NULL,
    [Sloupec2] [varchar](10) NULL,
    [Sloupec3] [varchar] (max) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec1]
           ,[Sloupec2]
           ,[Sloupec3]
           )
     VALUES
           ('abcdefghij',
           'abc',
           'abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcde
           fghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghija
           bcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefgh
           ijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij'
)
MS-SQL databázy krok za krokom

Reťazca s podporou unikódu

dátový typ rozsah Pamäť potrebná pre uloženie
NCHAR (n) Pevná dĺžka, n 1 až 4000 nx 2 bajtov (bude rezervované miesto)
nvarchar (n / max) Variabilná dĺžka, n 1 až 4000, max indikuje maximálnu možnú dĺžku nx 2 bajtu + 2 max = 2 31-1 bajtov
Používa sa na ukladanie reťazcov v unikódu, tzn. Na uloženie každého znaku budú použité dva bajty. Možno tak ukladať národné znaky, napríklad diakritiku.

Príklad

CREATE TABLE [dbo].[Priklad1](
    [sloupec1] [nchar] (10) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec1])
     VALUES
           ('ěščřžýáíé')
MS-SQL databázy krok za krokom

Binárne reťazce

dátový typ rozsah Pamäť potrebná pre 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 nx 2 bajtu + 2 max = 2 31-1 bajtov
Používa sa na ukladanie binárnych súboru, napríklad obrázku, priamo do databázy.

Príklad

CREATE TABLE [dbo].[Priklad1](
    [sloupec1] [binary](500) NULL,
    [sloupec2] [varbinary](500) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec1],[sloupec2])
     VALUES
           (convert(binary, 'sdkaldjwi235486werfsfg3125h3ouršáhkjíěéýřžéščínřvéěínřzcfdgdfhb654'),
            convert(binary, 'sdkaldjwi235486werfsfg3125h3ouršáhkjíěéýřžéščínřvéěínřzcfdgdfhb654')
           )
MS-SQL databázy krok za krokom

Ostatné dátové typy

  • 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! Pre 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].[Priklad1](
    [sloupec1] [uniqueidentifier] NULL DEFAULT (newid()),
    [sloupec2] [Timestamp],
    [sloupec3] [char] (3)
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec3])
     VALUES
           ('abc')
MS-SQL databázy krok za krokom

Ak máte otázky, neváhajte sa opýtať v komentároch!

V nasledujúcom cvičení, Riešené úlohy k 11. lekcii MS-SQL, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Predchádzajúci článok
MS-SQL - Uložené procedúry
Všetky články v sekcii
MS-SQL databázy krok za krokom
Preskočiť článok
(neodporúčame)
Riešené úlohy k 11. lekcii MS-SQL
Článok pre vás napísal Ondřej Trnka
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
OT
Aktivity