item: Das ganze CONCAT() und CAST-Zeugs ist hier völlig übertrieben. Um von deinem Datum '0000-04-01' auf das Datum '2011-04-01' zu kommen reicht ein einfacher DATE_ADD() um die Jahreszahl zur Zahl 0 dazuzurechnen
item: Mein Ansatz.
Zuserst eine Untertabelle die die Jahre für von und bis berchnet die für das ausgewählte Jahr (im Beispiel 2011) in frage kommen
von_jahr | bis_jahr
2011 | 2011
2011 | 2012
Diese dann mit den Daten kombinieren und jene ausfiltern, dies nicht braucht.
SQL:
-- zu umständlich:
CAST(CONCAT({$year}, '-', MONTH(start), '-', DAY(start)) AS DATE) AS start,
-- Vereinfachte Lösung
DATE_ADD(start, INTERVAL {$year} YEAR) AS start
item: Mein Ansatz.
Zuserst eine Untertabelle die die Jahre für von und bis berchnet die für das ausgewählte Jahr (im Beispiel 2011) in frage kommen
von_jahr | bis_jahr
2011 | 2011
2011 | 2012
Diese dann mit den Daten kombinieren und jene ausfiltern, dies nicht braucht.
SQL:
SELECT
id,
DATE_ADD(von, INTERVAL von_jahr YEAR) AS von_new,
DATE_ADD(bis, INTERVAL bis_jahr YEAR) AS bis_new
FROM
test123,
--Zeilen mit den von bis Jahren. Hier das 2011 durch das gewünschte Jahr ersetzen
(SELECT @jahr:=2011 AS von_jahr, @jahr AS bis_jahr
UNION ALL SELECT @jahr AS von_jahr, @jahr+1 AS bis_jahr ) AS temp_rows
WHERE
bis_jahr = von_jahr
OR bis < von
Zuletzt bearbeitet von einem Moderator: