Avatar billede humanoid Nybegynder
01. august 2007 - 12:06 Der er 5 kommentarer

find dato i år, med oplysning om uge og ugedag

Er der en måde man kan finde datoen i år, for en given ugedag og ugenummer

Hvis vi antager at onsdag er 4. dag i ugen.

Hvordan finder jeg så datoen for 4. ugedag i uge 31 i år.

dvs. datoen 01-08-2007
Avatar billede kjulius Novice
01. august 2007 - 20:42 #1
Du kan lave en hjælpetabel, hvor du indtaster tallene fra 1 til 366. Når du så har den, kan du finde datoen sådan her (tror jeg nok, har ikke mulighed for at teste det):

SELECT DATE_ADD(DATE_SUB(CURDATE(), DAYOFYEAR(CURDATE()), Dag)
FROM Dage
WHERE WEEK(DATE_ADD(DATE_SUB(CURDATE(), DAYOFYEAR(CURDATE()), Dag), 1) = 31
  AND WEEKDAY(DATE_ADD(DATE_SUB(CURDATE(), DAYOFYEAR(CURDATE()), Dag)) = 4


Det burde give dig den korrekte dato (jeg kan som sagt ikke teste det).

Hvordan kan du så bruge det til at udvælge en dato i andre tabeller? Det kan du med en  cross join. Lad os antage, at du har en har registreret nogen ordrer til levering på bestemte dage:

SELECT o.*
FROM ORDRER o
CROSS JOIN Datoer d
WHERE o.Leveringsdato = DATE_ADD(DATE_SUB(CURDATE(), DAYOFYEAR(CURDATE()), d.Dag)
  AND WEEK(DATE_ADD(DATE_SUB(CURDATE(), DAYOFYEAR(CURDATE()), d.Dag), 1) = 31
  AND WEEKDAY(DATE_ADD(DATE_SUB(CURDATE(), DAYOFYEAR(CURDATE()), d.Dag)) = 4
Avatar billede kjulius Novice
01. august 2007 - 20:54 #2
Du kan lave en hjælpetabel, hvor du indtaster tallene fra 1 til 366. Når du så har den, kan du finde datoen sådan her (tror jeg nok, har ikke mulighed for at teste det):

SELECT DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAYOFYEAR(CURDATE()) DAYS), INTERVAL Dag DAYS)
FROM Dage
WHERE WEEK(DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAYOFYEAR(CURDATE()) DAYS), INTERVAL Dag DAYS), 1) = 31
  AND WEEKDAY(DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAYOFYEAR(CURDATE()) DAYS), INTERVAL Dag DAYS)) = 4


Det burde give dig den korrekte dato (jeg kan som sagt ikke teste det).

Hvordan kan du så bruge det til at udvælge en dato i andre tabeller? Det kan du med en  cross join. Lad os antage, at du har en har registreret nogen ordrer til levering på bestemte dage:

SELECT o.*
FROM ORDRER o
CROSS JOIN Datoer d
WHERE o.Leveringsdato = DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAYOFYEAR(CURDATE()) DAYS), INTERVAL d.Dag DAYS)
  AND WEEK(DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAYOFYEAR(CURDATE()) DAYS), INTERVAL d.Dag DAYS), 1) = 31
  AND WEEKDAY(DATE_ADD(DATE_SUB(CURDATE(), INTEVAL DAYOFYEAR(CURDATE()) DAYS), INTERVAL d.Dag DAYS)) = 4
Avatar billede kjulius Novice
01. august 2007 - 20:55 #3
Havde ikke fået angivet INTERVAL i DATE_ADD og DATE_SUB... :-(
Avatar billede humanoid Nybegynder
02. august 2007 - 10:42 #4
Jeg fandt ud af det med
SELECT * FROM tabel WHERE WEEKOFYEAR(tabel.TimeStamp) = 31 AND DAYOFWEEK(tabel.TimeStamp) = 4 AND YEAR(tabel.TimeStamp) = YEAR(NOW())
Avatar billede kjulius Novice
02. august 2007 - 17:27 #5
Okay, men det var nu ikke det du spurgte om i dit spørgsmål. Der ville du så vidt jeg forstår spørgsmålet have returneret datoen svarende til ugenummer og ugedag.
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