[LUGOS] SQL query vprasanje

Andrej Mršek andrej.mrsek at amis.net
Fri Sep 28 11:45:34 CEST 2001


Zdravo !

Kot si verjetno že ugotovil, ali pa še boš je računalnik stroj, ki napravi točno
to kar mu ukažeš. Ob tem odmislimo neljube hrošče v programski opremi. Tudi tvoj
query napravi točno to kar si mu naročil - pravzaprav glede na konkretne podatke
nič. Query, ki si ga napisal izpiše podatke samo če: je datum večji od
2001-06-01 in ura večja od 10:00 in hkrati datum manjši od 2001-07-01 in ura od
8:00. Zdaj pa pomisli - kako je lahko ura manjša od 8:00 in večja od 10:00
hkrati? Bolj težko !
Problem je najlažje rešljiv tako, da bos združil datum in čas (tako podatkovno
stukturo podpirajo v glavnem vse baze - postgres recimo TIMESTAMP) - kar je tudi
performančno daleč najboljša rešitev. Ker ti očitno boolovi izrazi delajo
probleme boš s prehodom na tako podatkovno stukturo ubil dve muhi na en mah
(funkcija between). Pretvorbo pa boš že poštudiral - to pa res ni težko. Če ne
znaš drugače izvozi bazo kot tekst pa imaš v shellu orodja kot so sed, awk, ...

Alternativno rešitev, ki je bolj zasilno štrikanje pa bi bila (na pamet- brez
optimizacije izrazov):
-------
(zacetni_datum<datum_v_tabeli in(AND) datum_v_tabeli<koncni_datum)
ali (OR)
(zacetni_datum=datum_v_tabeli in(AND) zacetni_cas<=cas_v_tabeli)
ali (OR)
(datum_v_tabeli=koncni_datum in(AND) cas_v_tabeli<=koncni_cas) 
---

Lep pozdrav, Andrej

 
> rad bi naredil query kot sledi:
> SELECT date, time, podatek FROM tabela WHERE (date>='2001-06-01' AND
> time>='10:00:00') AND (date<='2001-07-01' AND TIME<='08:00:00') ORDER
> BY
> date, time
> 
> a zal mi ne dela kot bi hotel ... namrec hotel bi dobiti ven vse podatke
> od
> 6.jun 2001 10:00 pa VSE do 1.jul 2001 8:00 << mi zna kdo pomagati -
> mislim
> da ti oklepaji ne delajo???



More information about the lugos-list mailing list