ARCHIV |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
PostgreSQL (10) - SELECT IVV tomto díle se podíváme na funkce
sloužící pro zpracování datumu/času,
síťových hodnot a geometrických dat. Protože
minulý díl se téměř zvrhl v přepis dokumentace,
pokusím se přístup změnit. Datum a časPráce s datumem a časem zahrnuje operátory (+, -, *, /) a funkce. Podrobný a vyčerpávající popis funkcí je k dispozici v originální dokumentaci, v tomto díle budou zmíněny pouze ty nejzajímavější funkce včetně jejich použití. Součet (+) je použitelný pro přičítání intervalů k datumu/času, nebo pro sečtení dvou datumů. Rozdíl (-) slouží podobně o odčítání intervalu buď od jednoho intervalu, nebo od datumu/času, a nebo dav datumy od sebe. Součinem (*) a podílem (/) lze zpracovávat jen intervaly. Operace musí dávat smysl, pak na ní operátory fungují, například 3.9.1974/2 = ?; 28.2.1948 + 17.11.1989 = ?, 22.11.1988 * 2= ?, ... to jsou příklady nesmyslných operací, vážený čtenář nechť se sám zamyslí, jak by tato zadání vypočítal. Samozřejmě i tyto nesmysly lze řešit cimrmanovským úkrokem stranou - převodem na unixový čas (pro neznalé je to počet sekund od půlnoci 1. ledna 1970) a zpracováním. K násobení čas*čas ještě poznámku, co by to asi bylo za jednotku, sekunda na druhou? Kategorií, kterou netřeba vysvětlovati jsou operátory pro porovnávání (<,>,=,<=,>=,<>). Kromě oprátorů jsou k dispozici i funkce, z nichž zde budou ukázány alespoň ty nejzajímavější (tj. všechny), po tabulce s funkcemi bude uvedeno několik příkladů.
Příklady (nad tabulkami vytvořenými v 7. lekci tohoto seriálu):
SELECT AGE(dt_finish) FROM orders;
SELECT * FROM orders WHERE AGE(dt_finish)>interval '2 mons'; SELECT EXTRACT(day FROM now()); SELECT EXTRACT(dow FROM date '1984-04-26'); SELECT NOW()-interval '47 days'; SELECT 6*interval '5 days'; SELECT (date '1974-09-03', now()) OVERLAPS (date '1968-08-21', interval '1000 days'); PostgreSQL server umí v případě potřeby posouvat datum/čas dle potřeby aktuální časové zóny (jejich seznam je k nalezení zde) přidáním direktivy AT TIME ZONE 'xxx'. Zápis je například takovýto: Síťové hodnotyPod ošklivým nadpisem se skrývají operátory a funkce pro práci s hodnotami síťových adres uložených v PostgreSQL tabulkách. Z operátorů jsou přítomny pouze operátory pro porovnávání, tedy žádný součet, součin, rozdíl, či podíl, ale pouze porovnávání hodnot <, >, =, <=, >=, k nimž přibyly 4 operátory s následujícím zápisem a významem:
Pozor: porovnávají se pouze IP adresy, které nemusí vúbec souviset se skutečnou lokací počítačů, tzn. že dvě lokální sítě s adresací například 127.xxx.yyy.zzz mohou být za různými přesměrováními (proxynami) a přesto příslušnost počítače z jedné sítě může být vyhodnocena jako pravdivá v druhé síti. Oparátory >>, >>=, <<= a << nefungují na Mac adresy. Funkcí pro práci se síťovými adresami v PgSQL serveru je malé množství, proto zde budou uvedeny všechny.
Práci s IP adresami lze potřebovat napříklat při tvorbě redakčního systému (ano, autor je webař a má webařské uvažování), aby bylo možné zakázat IP adresy (jsou-li pevné), z nichž přichází třeba flamer. Protože v tabulkách, které které byly zatím pro tento seriál připraveny a jsou ke stažení u 7 dílu síťová typy nebyly zavedeny, budou příklady bez jejich výběru z databáze:
SELECT broadcast('127.0.0.2/15');
SELECT netmask('127.0.0.2/15'); SELECT network('127.0.0.2/15'); SELECT trunc(macaddr '96:15:54:87:37:ac'); Geometrické typyV 5. díle seriálu byly představeny geometrické typy, které PostgreSQL server poskytuje. Spolu s nimi byly ukázány i některé funkce, které jsou použitelné při práci s těmito typy (jednalo se například o funkce popen(), isopen). Funkcí a operátorů je mnohem více, vzhledem k tomu, že by nebylo vhodné, aby v tomto místě byla dlouhá tabulka s jejich názvy, bude čtenář laskavě odkázán na originální dokumentaci, kde najde jejich výčet a zde bude uvedeno pouze několik příkladků použití. Funkce a operátory jsou rozřazeny do 3 skupin, operátory (nejrůznější způsoby porovnávání pozic objektů a případně jejich změny), funkce (testy otevřenosti a uzavřenosti, otevření a uzavření polygonů silou a získání rozměrů) a konverzní funkce (převody mezi jednotlivými geometrickými typy). Protože, podobně jako síťovéhodnoty, nejsou geometrické typy v příkladových tabulkách definovány, budou do příkladů zadávány přímo hodnoty a ne názvy sloupců. Jak již bylo předestřeno dříve, nejedná se o příliž často používané typy, proto je lze trochu "odbýt". Tedy pokud někdo ze ctěných čtenářů zná aplikace, které tyto typy používají, nechť na ně autora upozorní (autora napadlo jen uložení SVG entit). Příklady:
select box '((0,0),(8,3))' + point '(2.0,-1.5)'; --posunuti obdelniku
SELECT box '((0,0),(1,1))' && box '((2,2),(2.5,2.5))'; -- test prekryti dvou ctvercu SELECT lseg '((1,1),(0,1))' ?-| lseg '((5,5),(5,0))'; --test, zda-li je kolmé SELECT POLYGON(15, CIRCLE '((0,0),2.0)'); --vytvoteni 15 uhelniku z opsane kruznice Těch několik příkládků, které jsou zde uvedeny není vyčerpávajících, ale jak jsem napsal, geometrické typy se moc nepoužívají. ZávěrTento díl je trochu kratší a snad trochu jinak psaný, než minulé dva. V příštím díle bude probráno malinko složitější téma a to výběr dat pomocí regulerních výrazů, které jsou samy o sobě téma na seriálek.
Související články
Předchozí Celou kategorii (seriál) Další
PostgreSQL (1) - Historie a pohledy jinam
PostgreSQL (2) - Proč PgSQL, data a relace PostgreSQL (3) - Instalace, základní administrace PostgreSQL (4) - Datové typy, vytvoření tabulek PostgreSQL (5) - Další datové typy a práce s časem i binarními řetězci PostgreSQL (6) - Uložení, aktualizace a mazání dat. PostgreSQL (7) - Výběr dat z databáze PostgreSQL (8) - SELECT II. PostgreSQL (9) – SELECT III PostgreSQL (11) - Výběr pomocí vzorků PostgreSQL 12 - urychlení výběrů PostgreSQL (13) - Na co se zapomnělo PostgreSQL (14) - omezení dat (Constraints) PostgreSQL (15) - Transakce PostgreSQL (16) - Zamykání PostgreSQL (17) - Datový typ pole PostgreSQL (18) - Datový typ pole II PostgreSQL (19) - Vlastní datové typy PostgreSQL (20) - Vlastní datové typy II PostgreSQL (21) - Spojování dotazů PostgreSQL (22) - Poddotazy PostgreSQL (23) - Optimalizujeme rychlost PostgreSQL (24) - Views (Pohledy) PostgreSQL (25) - Administrace skupin a uživatelů PostgreSQL (26) - Rozšiřujeme funkčnost Předchozí Celou kategorii (seriál) Další
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |