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ý typ | rozsah | Pamäť potrebná pre uloženie |
---|---|---|
bit | 0 až 1 | 1 bit |
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ý typ | rozsah | Pamäť potrebná pre uloženie |
---|---|---|
money | -922,337,203,685,477.58 až 922,337,203,685,477.58 | 8 bajtov |
smallmoney | - 214,748.3648 to 214,748.3647 | 4 bajty |
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 )
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 |
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 |
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 |
- 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' )
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 |
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' )
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 |
Príklad
CREATE TABLE [dbo].[Priklad1]( [sloupec1] [nchar] (10) NULL ) ON [PRIMARY] GO INSERT INTO [dbo].[Priklad1] ([sloupec1]) VALUES ('ěščřžýáíé')
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 |
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') )
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')
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í.