sql >> Databáze >  >> RDS >> PostgreSQL

Proč funkce horního rozsahu postgresu pro rozsah dat vrací exkluzivní hranici?

Re Otázka č. 1 :zavřeno-otevřeno je standardní způsob, jak zacházet s rozsahy dat, s 20-25letou historií v akademické literatuře. Viz str. 24–25 Bitemporálních dat od Toma Johnstona a také Vývoj časově orientovaných databázových aplikací v SQL od Richarda Snodgrasse.

Ale myslím, že jedním z důvodů je, že po sobě jdoucí rozsahy se nepřekrývají. Pokud a je [May2016, Jun2016) a b je [Jun2016, Jul2016) , nesdílejí žádné dny. Takže se „zaklapnou“ a nemusíte se starat o okrajová pouzdra, kde se dotýkají.

Všimněte si, že jednou nevýhodou (možná) uzavřeného-otevřeného je, že nemůžete zadat prázdný rozsah. [May2016, May2016) je prostě seberozpor, zatímco [May2016, May2016] je okamžik.

Re Otázka č. 2 :Opět to mohlo být jinak, ale napadá mě několik výhod vytvoření upper([May2016, Jun2016)) návrat Jun2016 :

  • Vrátí to samé bez ohledu na rozlišení rozsahu.
  • Je to spíše jako matematický význam otevřeného koncového bodu, kde je jediným možná odpověď.
  • Vrátí to, co odpovídá „štítku“, takže je to pravděpodobně méně překvapivé.
  • Umožňuje vám snadno zjistit, zda se dva rozsahy "setkají":upper(a) = lower(b) .

Všimněte si také, že v Postgres vše datové typy související s časem jsou diskrétní. Dříve existovala možnost kompilovat Postgres s časovými razítky založenými na float, ale je zastaralá a nikdy jsem se s ní nesetkal.




  1. Jak najít závislosti uvnitř balíčku Oracle?

  2. Transformujte data ODBC v CloverDX

  3. Dobrý nápad/špatný nápad? Používáte MySQL RAND() mimo malou sadu výsledků dílčích dotazů?

  4. Spouštěč aktualizace MYSQL získá aktualizované ID řádku