Avatar billede Lasse Novice
12. februar 2002 - 23:53 Der er 7 kommentarer og
1 løsning

datediff

Jeg har en tabel over brugere af et system. I denne tabel er der en kolonne hvori der staar brugernes foedselsdato. Den er erklaeret som smalldate. Dette kunne f.eks. vaere 01-01-1970. Jeg vil nu gerne vide hvor lang tid der er til at denne person har foedselsdag. Jeg har kigget lidt omkring og kommet frem til denne SQL saetning:

select DateDiff(day, GetDate(), DateAdd(year,DateDiff(year, Birthday, GetDate()),Birthday)) from users

Problemet er at der er nogen der har negativ dage til de har foedselsdag, andre har positive. Jeg soeger en af to loesninger, begge kun vha SQL:

Enten vil jeg gerne have de antal dage der er til alle mine brugeres foedselsdage. Kan det ikke lade sig goere vil jeg gerne have sorteret de brugere fra hvor dagene er negative(de har allerede haft foedselsdag i aar). Dette mener jeg burde kunne goeres saaledes:

select DateDiff(day, GetDate(), DateAdd(year,DateDiff(year, Birthday, GetDate()),Birthday)) daydiff from users where daydiff>=0

Goer jeg imidlertid det, faar jeg en fejl. Den siger at daydiff ikke eksisterer. Hvad goer jeg forkert, eller endnu bedre, hvordan laver man den foerste loesning
Avatar billede bennytordrup Nybegynder
13. februar 2002 - 08:15 #1
Du kan ikke bruge felt-alias (daydiff) i en where. Du skal bruge hele det oprindelige udtryk
DateDiff(day, GetDate(), DateAdd(year,DateDiff(year, Birthday, GetDate()),Birthday))
Avatar billede nolle_k Nybegynder
13. februar 2002 - 14:23 #2
Eller også skal du sørge for at dem, der har haft fødselsdag i år får lagt et ekstra år til så du ikke får de negative datoer. Og hvorfor skal de personer, der har haft fødselsdag i år snydes????
Avatar billede bennytordrup Nybegynder
13. februar 2002 - 14:25 #3
nolle_k >> Prøv at læse hans fejlbesked. Fejlen er, af daydiff ikke eksisterer, og daydiff optræder kun som felt-alias og i hans where.
Avatar billede Lasse Novice
13. februar 2002 - 19:01 #4
men nolle har ret... Det var egentlig den loesning jeg ALLER helst vil have, men jeg kan ikke lige se SQL loesningen til den faetter, hvis man kun skal have een SQL saetning.

benny.tordrup: Jeg vil lige proeve det andet. Er det saadanne med alle felt alias? Altsaa at man ikke kan bruge dem i where saetningen?
Avatar billede bennytordrup Nybegynder
14. februar 2002 - 11:59 #5
Ja
Avatar billede Lasse Novice
14. februar 2002 - 16:41 #6
man kan bruge WHEN i en select saetning. Kan man saette >0 (stoerrere end nul) ind i saadanne en, eller er det bare konstanter?
Avatar billede bennytordrup Nybegynder
15. februar 2002 - 08:28 #7
case
  when EtFelt>0 then
  else
end
Avatar billede Lasse Novice
15. februar 2002 - 16:12 #8
cool nok benny... her er pointene. Takker
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