|
| [MySQL] Hentning af dato før, nu og eft Fra : Martin |
Dato : 15-04-05 02:01 |
|
Hejsa...
Jeg har et lille problem
jeg har 2 felter i min tabel start_dato og slut_dato
begge 2 af typen DATE - Datoen kan være en dato eller 0000-00-00
Jeg skal have 3 SELECT's
en før, efter og nu
FØR er alle dem med start og slut dato før nu og IKKE 0000-00-00
NU er alle dem med start før nu og slut dato efter nu OG 0000-00-00
og EFTER er alle dem med start og slut dato efter nu og IKKE 0000-00-00
Rimelig nemt faktisk - men mine 3 selects ser således ud:
Før:
WHERE (start_dato != '0000-00-00' AND slut_dato != '0000-00-00') AND
(start_dato < NOW() AND slut_dato < NOW())
Efter:
WHERE (start_dato != '0000-00-00' AND slut_dato != '0000-00-00') AND
(start_dato > NOW() AND slut_dato > NOW())
og Nu:
WHERE (start_dato = '0000-00-00' AND slut_dato = '0000-00-00') OR
(start_dato >= NOW() AND slut_dato <= NOW())
men der er noget galt - jeg tror jeg vender < og > forkert - men kan
bare ikk finde problemet :(
| |
Jens Koldbæk (15-04-2005)
| Kommentar Fra : Jens Koldbæk |
Dato : 15-04-05 10:01 |
|
Martin <news@natten-i.dk> skrev:
>men der er noget galt - jeg tror
>jeg vender < og > forkert - men kan
>bare ikk finde problemet :(
Prøv
Nu:
WHERE (start_dato = '0000-00-00'
AND slut_dato = '0000-00-00') OR
(start_dato <= NOW() AND slut_dato >= NOW())
| |
Kristian Damm Jensen (15-04-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 15-04-05 10:12 |
|
Martin wrote:
> Hejsa...
>
> Jeg har et lille problem
> jeg har 2 felter i min tabel start_dato og slut_dato
> begge 2 af typen DATE - Datoen kan være en dato eller 0000-00-00
>
> Jeg skal have 3 SELECT's
> en før, efter og nu
>
> FØR er alle dem med start og slut dato før nu og IKKE 0000-00-00
>
> NU er alle dem med start før nu og slut dato efter nu OG 0000-00-00
>
> og EFTER er alle dem med start og slut dato efter nu og IKKE
0000-00-00
>
> Rimelig nemt faktisk - men mine 3 selects ser således ud:
>
> Før:
> WHERE (start_dato != '0000-00-00' AND slut_dato != '0000-00-00') AND
> (start_dato < NOW() AND slut_dato < NOW())
>
> Efter:
> WHERE (start_dato != '0000-00-00' AND slut_dato != '0000-00-00') AND
> (start_dato > NOW() AND slut_dato > NOW())
>
> og Nu:
> WHERE (start_dato = '0000-00-00' AND slut_dato = '0000-00-00') OR
> (start_dato >= NOW() AND slut_dato <= NOW())
>
>
> men der er noget galt - jeg tror jeg vender < og > forkert - men kan
> bare ikk finde problemet :(
Ja, der er noget frygteligt galt.
Du har fire forskellige betingelse:
(A) start_dato = '0000-00-00'
(B) slut_dato = '0000-00-00'
(C) start_dato < NOW()
(D) slut_dato < NOW()
Det giver 2^4 forskellige kombinationsmuligheder (vi ser lige bort fra
at du både har < NOW() og <= NOW() ) og du har lang fra dækket dem
allesammen. Nogle af dem giver naturligvis ikke mening, eftersom man
må gå ud fra, at start_dato <= slut_dato, men jeg tror alligevel, at
der er huller.
Forsøg i stedet førlgende tilgang:
Ser vi bort fra muligheden '0000-00-00' har du tre muligheder, der er
interessante:
NOW() < start_dato -- Før
start_dato <= NOW() and NOW() <= slut_dato -- Nu
slut_dato < NOW() -- Efter
Dette er den grundlæggende opdeling. Herefter kan du tilføje
sammenligning med '0000-00-00'. Problemet er her naturligvis, hvordan
det skal fortolkes, når en dato ikke er angivet, og specielt når
datoen i den ene ende af interevallet ikke er angivet.
Din beskrivelse er ikke fuldstændig klokkeklar, men jeg ville forsøge
mig med:
-- Før
NOW()< start_dato
AND start_dato <> '0000-00-00'
AND slut_dato <> '0000-00-00'
-- Nu
(start_dato <= NOW() and NOW() <= slut_dato )
OR start_dato = '0000-00-00'
OR slut_dato = '0000-00-00'
-- Efter
slut_dato < NOW()
AND start_dato <> '0000-00-00'
AND slut_dato <> '0000-00-00'
Dette dækker i al fald alle kombinationer uden overlap, og kan tolkes
som værende i overenstemmelse med din beskrivelse ovenfor.
VH
Kristian
| |
Lars Sherman Christe~ (16-04-2005)
| Kommentar Fra : Lars Sherman Christe~ |
Dato : 16-04-05 16:27 |
|
Martin wrote:
> Hejsa...
>
> Jeg har et lille problem
> jeg har 2 felter i min tabel start_dato og slut_dato
> begge 2 af typen DATE - Datoen kan være en dato eller 0000-00-00
Hej Martin
Hvordan kan en dato være 0000-00-00. Jeg er ret sikker på, at når du
definerer et felt med typen DATE, vil 0000-00-00 være invalid. Skulle du
ikke overveje at bruge null, hvis det er en indikation af at datoen ikke
er defineret?
Hvis du ikke bryder dig om at bruge null, så kan du overveje at bruge
0001-01-01 i start_dato og 9999-12-31 i slut_dato.
Venlig hilsen
Lars
| |
Troels Arvin (16-04-2005)
| Kommentar Fra : Troels Arvin |
Dato : 16-04-05 17:19 |
|
On Sat, 16 Apr 2005 17:27:03 +0200, Lars Sherman Christensen wrote:
> Hvordan kan en dato være 0000-00-00
Det er en MySQLisme.
--
Greetings from Troels Arvin, Copenhagen, Denmark
| |
Martin (18-04-2005)
| Kommentar Fra : Martin |
Dato : 18-04-05 02:10 |
|
Lars Sherman Christensen wrote:
> Martin wrote:
>
>> Hejsa...
>>
>> Jeg har et lille problem
>> jeg har 2 felter i min tabel start_dato og slut_dato
>> begge 2 af typen DATE - Datoen kan være en dato eller 0000-00-00
>
>
> Hej Martin
>
> Hvordan kan en dato være 0000-00-00. Jeg er ret sikker på, at når du
> definerer et felt med typen DATE, vil 0000-00-00 være invalid. Skulle du
> ikke overveje at bruge null, hvis det er en indikation af at datoen ikke
> er defineret?
Tjaa... 0000-00-00 virker helt fint i MySQL.
Hvorfor jeg bruger det er simpelthen fordi det skal være muligt at sætte
en ubestemt tid på en funktion.
Om jeg kunne bruge null istedet - det tror jeg faktisk ikk mysql kan
lide - har godt nok ikk prøvet det.
| |
|
|