LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> PostgreSQL (10) - SELECT IV

V 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.

31.5.2005 06:00 | MaReK Olšavský | Články autora | přečteno 22059×

Datum a čas

Prá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ů.

Funkce Návratový typ Popis
age (timestamp, timestamp)
age (timestamp)
interval (v obou případech) čas mezi dvěma datumy, v případě použití jen jedné hodnoty se vrací čas (interval) do položení dotazu
current_date
current_time
current_datetime
date
time with time zone
timestamp with time zone
aktuální čas (na PostgreSQL server), datum a časové razítko (datum+čas), v posledních dvou případech včetně časové zóny
date_part(text, timestamp/interval) double precision Podle položky text (millennium, century, decade, year, quarter (řtvrtletí), month, week, day, dow (day of week = den týdne), minute, second, milliseconds, micoseconds, timezone, timezone_hour, timezone_minute) vrátí příslušnou část časového údaje jako číslo.
date_trunc(text, timestamp) timestamp Zaokrouhlení, parametr text je stejných hodnotot, jako v případš date_part
extract(text from timestamp/interval) double precision Ekvivalentní funkce vůči date_part
isinfinite(timestamp/interval) boolean Test, zda-li timestamp, nebo interval, je končný.
localtime
localtimestamp
time
timestamp
Funkce podobne current[_???]
now() timestamp with time zone Aktuální timestamp, funkce je ekvivalentní current_datetime, má kratší zápis a často se používá pro vložení aktuálního datumočasového razítka k editacím článků a komentářů v redakčních systémech
timeofday() text aktuální datum a čas
overlaps boolean Ověření, zda se dva datumové intervaly překrývají

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: SELECT NOW() AT TIME ZONE 'CCT';.

Síťové hodnoty

Pod 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:

  • >> - Test, zda-li je IP adresa obsažena (neboli síť1 je nadsítí sítě2) (SELECT inet '127.0.0/24' >> inet '127.0.0.1';)
  • >>= - Zda-li je IP adresa sítě2, nebo je-li to přímo ona
  • << - Test zda-li je síť1 podsítí sítě2
  • <<= - Test, je-li adresa ze sítě1 podardesou v síti2, případně je-li to přímo ona.

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.

Funkce Návratový typ popis
broadcast(inet) inet Vysílací adresa
host(inet) text IP adresa jako text
masklen(inet) integer délka síťové masky
set_masklen(inet, integert) inet nastavení délky síťové masky
netmask(inet) inet získání síťové masky
network(inet) cidr získání IP adresy bez síťové masky
text(inet) text IP adresa a délka síťové masky jako text
abbrev(inet) text Zkrácená adresa a délka síťové masky jako text
trunc(macadr) macadr Nastaví poslední 3 byty mac adresy na 00

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é typy

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ěr

Tento 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.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1

12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář

6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

31.7.2023 14:13 / Linda Graham
iPhone Services

30.11.2022 9:32 / Kyle McDermott
Hosting download unavailable

13.12.2018 10:57 / Jan Mareš
Re: zavináč

2.12.2018 23:56 / František Kučera
Sraz

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze