webForumDet fria alternativet

Hämta de tre närmaste födelsedagarna

Databaser & SQL

3 svar · 262 visningar · startad av LeonL

Medlem sedan dec. 20025 871 inlägg
Frågan#1

I en databas har jag i min användartabell ett datumfält för användarens födelsedag. Datumfältet innehåller olika årtal (för att räkna ut hur gamla de blir).

Hur skall jag skriva SQL-frågan så att servern hämtar de tre personer som fyller år snart?

Jag har förstått att man kan använda VBScript-funktionen Month() i SQL-frågan, men då tar man inte någon som helst hänsyn till dagen (om det råkar vara flera som fyller år under samma månad).

Jag har i alla fall kommit fram till detta än så länge:

SELECT TOP 3 [några fält] FROM tblUser WHERE Month(userBirthday) >= Month(Date()) ORDER BY Month(userBirthday)
Medlem sedan dec. 20025 483 inlägg
#2
select top 3
       [några fält]
  from tblUser
 where ( month(userBirthday) = month(Date())
          and
         day(userBirthday) >= day(Date()))
    or month(userBirthday) > month(Date())
order
    by userBirthday
Medlem sedan dec. 200012 464 inlägg
#3

Flyttas från ASP

Medlem sedan dec. 20025 871 inlägg
#4

Peter S:
Din kod tar inte hänsyn till att årtalen är olika för de olika användarna, så de äldsta hamnar alltid först.

Jag kom dock på hur man skulle göra. Min SQL-fråga funkade ju redan... det var bara så att den inte kunde sortera efter dagar efter att ha sorterat efter månaderna, så följande kod gjorde susen. :)

... ORDER BY Month(userBirthday), Day(userBirthday)
262 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)