Základy SQL #3. Datové typy | Soudruh Excel
Sloupec databáze může obsahovat pouze 1 datový typ, který byl zadán ve výrazu při vytváření tabulky. VYTVOŘENÍ TABULKYPo zadání názvu sloupce je nutné zadat datový typ tohoto sloupce.
create table albums ( date_release date, album_name text );
V různých systémech pro správu databází (DBMS), včetně PostgreSQL, existuje mnoho typů dat, ale nejčastěji se setkáváme s daty následujících kategorií:
- Znaky — Jakýkoli znak nebo symbol
- Čísla — Celá a zlomková čísla
- Data a časy — Datum a čas
Řetězcové datové typy
Datové typy řetězců jsou vhodné pro libovolnou kombinaci písmen, číslic a symbolů.
- znak(n)Řetězec pevné délky. Všechny hodnoty v tomto sloupci mají stejný počet znaků, který je uveden v závorkách. Pokud se pokusíte importovat kratší hodnotu, chybějící hodnota bude vyplněna mezerami. Tento datový typ je standardním typem SQL.
- varchar(n)Řetězec, jehož maximální délka je uvedena v závorkách. Řetězec může mít libovolnou délku v rozmezí n. Tento datový typ je standardním typem SQL.
- (souhrnně „Stránka (Stránky)“), a naše postupy pro shromažďování, využívání, uchovávání, ochranu a zpřístupnění takových informací. Tyto zásady platí pro informace, které shromažďujeme na těchto stránkách nebo v e-mailu, textových a jiných elektronických zprávách mezi vámi a těmito stránkami. Rovněž popisují vaše možnosti týkající se využívání vašich osobních údajů, přístupu k nim a jejich opravě.Řetězec neomezené délky. Tento datový typ není standardním typem SQL.
Vytvořme tabulku se 3 sloupci. Jeden sloupec pro každý z těchto datových typů. Do této tabulky přidejme data.
-- Создать таблицу create table string_types_sample ( char_col char(12), varchar_col varchar(12), text_col text );
-- Импорт данных в созданную таблицу insert into string_types_sample values ('dio', 'dio', 'dio'), ('acdc', 'acdc', 'acdc')
-- Экспорт таблицы в CSV copy string_types_sample to 'c:UsersuserDesktopsql_trainingstring_types_sample.csv' with (format csv, header, delimiter ',')
Pro uložení dat do souboru je potřeba:
- Vytvořte složku na ploše
- Klikněte pravým tlačítkem myši na složku – Vlastnosti – Zabezpečení – Upravit – Přidat – Pojmenujte skupinu “Vše” – Povolit vše
Otevřete uložený soubor CSV a pečlivě si prohlédněte data.
Číselné datové typy
Číselné sloupce ukládají různé typy čísel. Umožňují provádět výpočty s těmito čísly. Existuje velký rozdíl mezi číslem a číslem uloženým jako text. Čísla uložená jako text nelze sčítat, odčítat atd. Čísla uložená jako text také nejsou řazena jako běžná čísla.
Celá čísla
Celé číslo je celé číslo, které může být kladné nebo záporné. Standardní SQL má 3 datové typy pro ukládání celých čísel: smallint, celé číslo, bigintRozdíl mezi těmito datovými typy je maximální hodnota, kterou mohou uložit.
Datový typ | Místo v paměti | Rozsah hodnot |
---|---|---|
smallint | 2 bytů | -32768 .. + 32767 |
celé číslo | 4 bytů | -2147483648 .. + 2147483647 |
bigint | 8 bytů | -9223372036854775808 .. + 9223372036854775807 |
Typ bigint zvládne libovolná celá čísla, ale spotřebuje nejvíce místa. Pokud jste si jisti, že rozsah typu bude pro váš úkol dostatečný celé číslo, pak je lepší jej použít k zachování datového typu.
Pokud jsou číselné hodnoty sloupce striktně omezené, pak je datový typ vhodný smallintPříklady omezených hodnot: číslo dne v týdnu, rok, číslo domu, číslo bytu.
Automaticky inkrementující celá čísla
Pokud vytvoříte sloupce s datovými typy malý seriál, seriál, bigseriál, pak se hodnoty v těchto sloupcích budou s přidáváním nových řádků zvyšovat.
Chcete-li použít sloupec sériového typu, musíte při vytváření tabulky zadat název typu vedle názvu sloupce. Příklad vytvoření tabulky se sloupcem sériového typu seriál:
create table js_albums ( id serial, release_year smallint, album_name text )
Přidejme do tabulky jeden řádek:
insert into js_albums values (default, 1974, 'Rocka Rolla')
Přidejme ještě jeden řádek:
insert into js_albums values (default, 1976, 'Sad Wings of Destiny')
Nyní se podívejte, jak vypadá výsledná tabulka. Věnujte zvláštní pozornost prvnímu sloupci s názvem „id“.
Rozdíl mezi sériovými typy spočívá také v množství prostoru a rozsahu hodnot.
Datový typ | Místo v paměti | Rozsah hodnot |
---|---|---|
malý seriál | 2 bytů | 1 32767 .. |
seriál | 4 bytů | 1 2147483647 .. |
bigseriál | 8 bytů | 1 9223372036854775807 .. |
Desetinná čísla
Databáze SQL mají datové typy s pevnou a plovoucí desetinnou čárkou.
Pevná čísla bodů
Čísla s pevnou desetinnou čárkou se také nazývají čísla s libovolnou přesností. Datový typ používaný k ukládání takových čísel je numerický(přesnost, měřítko)V parametru přesnost je obecně specifikován maximální počet číslic a v parametru stupnice maximální počet čísel vpravo. Pokud nezadáte hodnotu stupnice, pak pro stupnice hodnota 0 bude automaticky přiřazena, tj. číslo se stane celým číslem nebo celé čísloPokud nezadáte oba parametry, bude automaticky přiřazena maximální přesnost.
Pokud sloupec vaší tabulky ukládá například směnný kurz dolaru se dvěma desetinnými místy, pak budete s největší pravděpodobností potřebovat numerický(5, 2).
Čísla s pohyblivou řádovou čárkou
Dva datové typy pro čísla s plovoucí desetinnou čárkou jsou skutečný и dvojitá přesnostRozdíl je v množství dat, která lze uložit do hodnot. Typ skutečný Umožňuje uložit až 7 desetinných míst. Typ dvojitá přesnost Umožňuje uložit až 15 desetinných míst.
Používání čísel s plovoucí a pevnou desetinnou čárkou
Datový typ | Místo v paměti | Typ bodu | Rozsah hodnot |
---|---|---|---|
číselné, desetinné | proměnlivý | Pevný | Až do 131072 před tečkou, až do 16383 za tečkou |
skutečný | 4 bytů | plovoucí bod | Přesnost až 7 desetinných míst |
dvojitá přesnost | 8 bytů | plovoucí bod | Přesnost až 15 desetinných míst |
Vytvořme tabulku se třemi sloupci. Jeden sloupec pro každý z těchto tří datových typů.
create table float_types_sample ( numeric_col numeric(10, 5), real_col real, double_col double precision )
Do této tabulky importujeme data.
insert into float_types_sample values (1.1, 1.1, 1.1), (1.12345, 1.12345, 1.12345), (1.1234567899, 1.1234567899, 1.1234567899) (1.123456789911111, 1.123456789911111, 1.123456789911111)
Provádíme export do CSV.
copy float_types_sample to 'c:UsersuserDesktopsql_trainingfloat_types_sample.csv' with (format csv, header, delimiter ',')
Otevřete vytvořený soubor CSV a prozkoumejte ho.
Přesnost výpočtů s plovoucí desetinnou čárkou
Způsob, jakým počítač ukládá a zpracovává čísla s plovoucí desetinnou čárkou, může vést k matematickým chybám. Vynásobte hodnotu z prvního a druhého sloupce číslem 10 milionů.
select numeric_col * 10000000 as fixed_col, real_col * 10000000 as float_col from float_types_sample limit 1
Stejné číslo jsme vynásobili 10 miliony, ale dostali jsme nerovnoměrné výsledky.
Datum a čas
PostgreSQL má 4 hlavní datové typy pro ukládání data a času.
Datový typ | Místo v paměti | popis | Rozsah |
---|---|---|---|
timestamp | 8 bytů | Datum a čas | Od roku 4713 př. n. l. do roku 294276 n. l. |
datum | 4 bytů | Datum bez času | Od roku 4713 př. n. l. do roku 5874897 n. l. |
čas | 8 bytů | Čas bez data | 00:00:00 — 24:00:00 |
interval | 16 bytů | Časový interval | +/− 178,000,000 XNUMX XNUMX let |
- timestamp ukládá datum a čas. Při vytváření sloupce je poměrně často potřeba přidat klíčová slova s časovým pásmempro určení časového pásma. Ve standardním SQL se pro vytvoření sloupce s časovým pásmem používá příkaz časové razítko s časovým pásmemV PostgreSQL můžete kromě standardní metody použít klíčové slovo časové razítko.
- datum ukládá pouze datum.
- čas ukládá pouze čas. Časové pásmo můžete přidat přidáním s časovým pásmem.
- intervalNeukládá hodnoty data a času. Zobrazuje, kolik času uplynulo. Může to být například 5 dní nebo 13 hodin.
Vytvořme tabulku se dvěma sloupci. První bude obsahovat hodnoty datového typu časové razítkoa ve druhém interval.
-- Создание таблицы create table dt_types ( timestamp_col timestamp with time zone, interval_col interval ); -- Импорт значений insert into dt_types values ('2021-10-31 15:15 +3', '15 days'), ('2022-10-31 00:10 MSK', '30 years')
PostgreSQL má speciální VIEW, který uchovává všechny způsoby, jak zadat časová pásma.
select * from pg_timezone_names where name ilike '%moscow%'
Použití intervalového typu ve výpočtech
Datový typ interval užitečné, když potřebujete provádět výpočty s použitím hodnot datum, čas, datetimeŘekněme, že v jednom sloupci je datum. Druhý sloupec obsahuje interval, který je třeba přičíst. Ve třetím sloupci potřebujeme získat nové datum, které je stejné jako staré datum s přidaným intervalem.
select timestamp_col, interval_col, timestamp_col + interval_col as new_timestamp from dt_types
Jiné datové typy
Datové typy pro práci s čísly, daty a textem jsou nejčastěji používané. Tyto datové typy však někdy nemusí být dostatečné. PostgreSQL podporuje velké množství datových typů, například:
- Boolean
- Geografické datové typy
- XML a JSON
- a mnoho dalších
Konverze datových typů
Někdy je potřeba převést jeden datový typ na jiný. Například někdy je třeba číslo uložené jako text převést na číslo. Pro převod datových typů použijte funkci OBSAZENÍ().
-- Преобразовать дату в текст select timestamp_col, cast(timestamp_col as varchar(10)) as new_timestamp_col from dt_types -- Преобразовать десятичное число в целое -- Преобразовать десятичное число в текст select numeric_col, cast(numeric_col as integer) as new_integer_col, cast(numeric_col as varchar(6)) as new_varchar_col from float_types_sample -- Попытка преобразовать буквы в число -- Вернется ошибка select cast(char_col as integer) from string_types_sample
V PostgreSQL místo funkce OBSAZENÍ() Můžete použít zkrácenou notaci. Například obsazení(časové_razítko_sloupec jako varchar(10)) ve zkrácené podobě to vypadá takto: timestamp_col::varchar(10).