Avatar billede Mik2000 Professor
28. januar 2015 - 23:26 Der er 7 kommentarer og
1 løsning

SQL spørgsmål

Jeg har en tabel

Arrangement:
id int
navn varchar(100)
datofra standardværdi:0 int
datotil standardværdi:0 int

Jeg vil gerne hente fra tabellen som følger
SELECT * FROM Arrangement WHERE ??????? ORDER BY navn ASC

Men hvad skal jeg skrive hvor ??????? er, når nedenstående er gældende

Hvis datofra ikke er 0, så skal datofra < time()
Hvis datotil ikke er 0, så skal datotil > time()
Hvis datofra og datotil er 0, så skal de blot hentes med ud
Hvis den ene er 0 og den anden ikke er, så skal den stadig matche den hvor den ikke er 0

Hvordan kan jeg lave det i ren SQL
Har prøvet med lidt CASE men synes ikke rigtigt det virker
Avatar billede arne_v Ekspert
29. januar 2015 - 03:22 #1
... WHERE datofra < TIME() AND IF(datotil<>0,datotil,2000000000) > TIME()

maaske
Avatar billede Mik2000 Professor
29. januar 2015 - 10:43 #2
Hej Arne

Det ser ud til at virke, og jeg forstår det også sådan nogenlunde.

datofra skal altid være mindre fordi 0 også er mindre
Hvis dato ikke er 0
Hvis datotil er over time

Men hvad betyder 2000000000?
Avatar billede Mik2000 Professor
29. januar 2015 - 10:43 #3
Og selvfølgelig mange tak for svaret - der er selvfølgelig point :)
Avatar billede arne_v Ekspert
29. januar 2015 - 15:39 #4
2000000000 er bare et meget stort tal som skal goere at TIME() altid er mindre end det
Avatar billede arne_v Ekspert
29. januar 2015 - 15:40 #5
svar
Avatar billede Mik2000 Professor
29. januar 2015 - 16:47 #6
Hej

Tænkte jeg godt det var, men så forstår jeg ikke helt sætningen.
Måske er det mig der er dum, men håber du lige vil forklare det.

Jeg tænker om ikke følgende
IF(datotil<>0,datotil) > TIME()
... burde betyde:
HVIS datotil IKKE ER 0 SÅ SKAL datotil VÆRE HØJERE END TIME()

Kan godt se det nok ikke er så det foregår, en hvordan er det så,og hvad betyder det at 2000000000 er der?
Avatar billede arne_v Ekspert
29. januar 2015 - 17:02 #7
IF(datotil<>0,datotil,2000000000) > TIME()

betyder:

hvis datotil<>0 saa datotil>TIME()
hvis datotil=0 saa 2000000000 > TIME() hvilket altid er sandt og derfor "ignoreres" datotil
Avatar billede Mik2000 Professor
30. januar 2015 - 02:11 #8
Okay, så er jeg med - tak for hjælpen og forklaringen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester