Toon posts:

SQL Datum query

Pagina: 1
Acties:
  • 422 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met 't schrijven van een pagina waarop gegevens uit een database worden gehaald aan de hand van de huidge week.
Het idee is dat op die pagina verjaardagen komen te staan.
Alleen de query die ik nu samen heb gesteld haalt niet alles eruit.
Ik weet waar 't probleem in zit, namelijk in de de schrikkeljaren.

code:
1
SELECT * FROM users WHERE (DATEPART(WEEK, birthday) = DATEPART(WEEK,{fn now()}))


Geeft voor deze week:
27-4-1980
28-4-1974

Terwijl dit eruit moet komen:
27-4-1973 *
27-4-1980
28-4-1974
29-4-1967 *

* (Vallen dus in verschillende weken als je terug gaat rekenen)

Weet iemand toevallig of er een mogelijkheid bestaat dat de query niet naar de jaartallen kijkt, maar gewoon naar de huidige week (zo-za) en dan checked of er data zijn die in die range vallen?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

De huidige week bevat een aantal datums (dd/mm).
Mensen die op die dagen geboren zijn hebben in deze week hun verjaardag.

Je kijkt nu naar het weeknummer in het geboortejaar, dat is niet relevant.

Who is John Galt?


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:31
Waarom kijk je niet naar DAY en MONTH ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Dat is zo, maar het moet dus wel zo zijn dat ik niet elke week die query moet gaan aanpassen met de range van de data die zich in die week voordoen. (Dan kan ik net zo gemakkelijk elke week die verjaardagen statisch op de site plakken).

Maar hoe vertel ik SQL dat dan?
whoami schreef op 28 april 2004 @ 10:05:
Waarom kijk je niet naar DAY en MONTH ?
Omdat het per week op de site moet en niet per maand/dag?
Of moet ik dat dan juist weer in Java gaan regelen? (Waar de site op draaid)

[ Voor 35% gewijzigd door Verwijderd op 28-04-2004 10:08 ]


  • lost95
  • Registratie: Januari 2000
  • Laatst online: 10:22
Op phpfreakz staat de volgende code, misschien dat jij er wat mee kan?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
via de functie get_week_number() kun je de week opvragen uit een timestamp, 
die je weer kan ophalen met mktime()

<? 
function is_leap_year($year) 
{ 
  if ((($year % 4) == 0 and ($year % 100)!=0) or ($year % 400)==0) 
    return 1; 
  else 
    return 0; 
} 

function iso_week_days($yday, $wday) 
{ 
  return $yday - (($yday - $wday + 382) % 7) + 3; 
} 
function get_week_number($timestamp) 
{ 
  $d = getdate($timestamp); 
  $days = iso_week_days($d[ "yday"], $d[ "wday"]); 
  if ($days < 0) 
  { 
    $d[ "yday"] += 365 + is_leap_year(--$d[ "year"]); 
    $days = iso_week_days($d[ "yday"], $d[ "wday"]); 
  } 
  else 
  { 
    $d[ "yday"] -= 365 + is_leap_year($d[ "year"]); 
    $d2 = iso_week_days($d[ "yday"], $d[ "wday"]); 
    if (0 <= $d2) 
    { 
      $days = $d2; 
    } 
  } 
  return (int)($days / 7) + 1; 
} 
?> 

ff practisch voorbeeldje: 

<? 
$time = mktime(0,0,0,8,10,2001); 
print get_week_number($time); 
?> 

[ Voor 22% gewijzigd door lost95 op 28-04-2004 10:54 ]

Vooral sinaasappels zijn bang voor persvrijheid.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Je bent imho al een heel eind in de goede richting.
Als je nu bij de geboortedatum een aantal jaar optelt, zodat je in het huidige jaar uitkomt.
Vervolgens kun je dan wel vergelijken op week.

Never underestimate the power of


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Je kijkt eerst op welke datum dit jaar de verjaardag valt. Dan kijk je in welke week dat is.
SQL:
1
2
3
4
5
6
7
SELECT
    name,
    birthday,
    DATEADD(yyyy, DATEDIFF(yyyy, birthday, GETDATE()), birthday)) AS birthdayThisYear
FROM users
WHERE DATEPART(ww, DATEADD(yyyy, DATEDIFF(yyyy, birthday, GETDATE()), birthday)) 
    = DATEPART(ww, GETDATE())

| Toen / Nu


Verwijderd

Topicstarter
Die werkt! :)
Thanks!

Stond btw 1 haakje teveel in voor AS.
Pagina: 1