» »

[SQL] časovno obdobje

[SQL] časovno obdobje

alesp56 ::

Torej v tabeli sta dva fielda datumZacetka in datumZakljucka in s pomocjo datetimepickerjev izberem casovno obdobje (zacetni in koncni datum), prenesem preko parametrov, torej kako sestaviti query, ki dobi zapise ki ustrezajo izbranemu časovnemu obdobju. Uporabljam MySql. Thx
in to je to...

AndrejS ::

select * from table where (mydate between param_DateFrom and param_DateTo)

BlueRunner ::

Err... napačen odgovor. Časovna intervala (daljici na časovni osi) se prekrivata (imata skupne točke) ntk. ko vsaj ena daljica vsebuje bodisi začetno točko, bodisi končno točko druge daljice.

Če sta Aspodaj in Azgoraj spodnji in zgornji meji prve daljice ter Bspodaj in Bzgoraj spodnji in zgornji meji druge daljice, potem se daljici prekrivata ntk. je izpolnjen naslednji pogoj:
(Aspodaj < Bspodaj AND Azgoraj > Bspodaj) OR (Aspodaj < Bzgoraj AND Azgoraj > Bzgoraj) OR (Bspodaj < Aspodaj AND Bzgoraj > Aspodaj) OR (Bspodaj < Azgoraj AND Bzgoraj > Azgoraj)

Ko ta izraz poenostaviš dobiš nekaj takšnega:
(Aspodaj < Bzgoraj AND (Azgoraj > Bzgoraj OR Aspodaj > Bspodaj)) OR (Azgoraj > Bspodaj AND (Azgoraj < Bzgoraj OR Aspodaj < Bspodaj))


Prepisano v nek nedeločen dialekt SQL-a, kjer je daljica A interval, ki ga vnašaš na vnosni maski, daljica B pa interval, ki je zapisan v tabeli, potem dobiš nekaj podobnega temu:

SELECT * FROM "tabela" WHERE (:vnosZacetek < "datumZakljucka" AND (:vnosZakljucek > "datumZakljucka" OR :vnosZacetek > "datumZacetka")) OR (:vnosZakljucek > "datumZacetka" AND (:vnosZakljucek < "datumZakljucka" OR :vnosZacetek < "datumZacetka")).

Če so intervali zaprti (želiš tudi tista prekrivanja, kjer se končni datum enega intervala natančno ujema z začetnim datumom drugega intervala), potem znake '<' in '>' nadomestiš z 'lt&=' in '&gt='.

Looooooka ::

brez kompliciranja:
SELECT * FROM nekaxytabela WHERE datumZacetka >= '2007-08-01' AND datumZakljucka <= '2007-08-11'


hudicev html...

Zgodovina sprememb…

BlueRunner ::

@Lo*oka: Morda res, ampak...

cLuBbY na žalost ni povedal kaj pomeni, da nek zapis ustreza. Če zapis ustreza samo in samo, če je v celoti vsebovan znotraj iskanega obdobja, potem ima Lo*oka prav. Če pa zapis ustreza če se seka z izbranim obdobjem, potem imam prav jaz. Če pa zapis ustreza, če je njegov začetek v izbranem obdobju, potem pa ima AndrejS skoraj prav - samo namesto "mydate" bi moral napisati "datumZacetka". Zadnja še obstoječa možnost pa je, da zapis ustreza, če je v izbranem intervalu njegov konec.

Zakaj toliko pravilnih in istočasno napačnih odgovorov? Enostavno: zato ker se te tri možnosti dejansko pojavljajo in vsaka zase je tipična za določen tip obdelav podatkov.

AndrejS je (skoraj) zadel možnost, ki se veliko pojavlja pri različnih potovanjih. Pri izbiri npr. ure odhoda letala vedno gledamo na uro odhoda, ki je na nekem intervalu od - do. Pri podvarianti pa me zanima ura prihoda letala na neko letališče, ker npr. iščem ustrezne lete, da bom pravočasno prispel na sestanek.

Jaz sem napisal možnost, ki se uporablja pri preverjanju prekrivanj terminov. Če želim organizirati sestanek, bo ta trajal od neke ure do neke ure, hkrati pa se ne sme prekrivati z nobenim drugim sestankom. Prekrivanja pa so lahko bodisi delna, bodisi celotna.

Lo*oka pa je napisal možnost, ki se uporablja takrat, kadar iščemo termine, ki se v celoti nahajajo znotraj iskanega intervala. Zakaj točno se to pogosto uporablja se sedaj res ne spomnem, vendar pa sem prepričan, da se uporablja, Lo*oka pa me verjetno lahko hitro spomne kdaj in kje.

Looooooka ::

wow da ne bo kdo mislu da sm sploh kj gor komentiru!
dal sm sam na hitr opcijo ce slucajno rabi neki nezakompliciranga, ker vprasanje dejansko ni blo dovolj natancno.
za termine ki se ne smejo prekrivat je jasno vec dela :)

aja kdaj se uporabla:
pri najbl "simple k pasulj zadevah".
primer...jst mam recimo stranko, ki zeli sprejemat MMSe(v mojem primeru slike).Te slike morm zapisat v njihovo bazo,ki je na drugem strezniku in sicer v pravilen krog za glasovanje.
Garantiral so mi da bojo oni pac pisali kroge in sicer podobno kot zgoraj:en krog traja od enega do drugega datuma.Ker niso hotl cist NIC komplicirat lepo uporablam podoben query in razvrstim po datumu in zberem prvega, ki se spada v izbor. in v ta krog pac zapisem sliko.

tuki to pride v postev res SAMO zato, ker garantirajo da ne bo ponavljajocih se krogov in da krogi ne bojo manjkali in da ce se slucajno najdeta 2 zberem tistega, ki se bo prvi zakljucil.
That is all.

Ce bi hotu dat pa kksn primer za planiranje sestankov bi pa osebno ze pejstu podobne queryje kot zgori plus kksno besno .NET kodo z arrayi.

Recimo da mu bodo primeri dovolj pomagal.

alesp56 ::

Sorry da se pozno oglašam, ko pa se je vnela takšna debata.:D Nek drug problem je bilo potrebno prej rešiti in sem stvar načeloma že rešil. In to takole.
Samo za izpis med izbranima datumoma query izgleda takole:
SELECT * FROM tabela
WHERE veljaod > =:datumod AND veljado < =:datumdo

in pa za "izvajanje" dogodkov:
SELECT * FROM tabela
WHERE (veljaod < =:datumod AND veljado > =:datumdo)

Ubistvu zelo enostavno, zdaj če vidi kdo kako napako oz. bi blo bolše kaj spremenit potem kr na tipkovnico z njo. Drugač pa zaenkrat mi to zadostuje (dokler ne najdem napake :D )
Thx zaenkrat.


ps:v čem je finta da sitnari forum z nekimi nepravilnimi html kodami?
in to je to...

Zgodovina sprememb…

  • spremenil: alesp56 ()

R33D3M33R ::

Uporabi [ st.koda ][ /st.koda ] (brez presledkov) pa bo.
Moja domača stran: http://andrej.mernik.eu
Na spletu že od junija 2002 ;)
:(){ :|:& };:


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# težava

Oddelek: Programiranje
233694 (2540) mladec
»

SQL query za datume, ki se ne prekrivajo

Oddelek: Programiranje
212591 (2222) omnimint
»

podatkovne baze pomoč

Oddelek: Programiranje
193035 (2588) kr?en
»

MSSQL Skripta - problem datum

Oddelek: Programiranje
5738 (645) Ericssony
»

PHP in JS problem :(

Oddelek: Programiranje
81710 (1518) l0g1t3ch

Več podobnih tem