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
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
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())
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.
Synes godt om
Ny brugerNybegynder
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.