Probleme mit Datum

cplume

Mitglied
Hallo Leute,
ich habe hier eine Abfrage für eine kleine Tabelle.

CREATE TABLE `termine` (
`termin_ID` int(11) NOT NULL auto_increment,
`termin_DAY` char(3) NOT NULL default '',
`termin_MONTH` char(3) NOT NULL default '',
`termin_YEAR` varchar(5) NOT NULL default '',
`termin_TEXT` varchar(250) NOT NULL default '',
`termin_ORT` varchar(50) NOT NULL default '',
`termin_ZEIT` varchar(30) NOT NULL default '',
`termin_REPEAT` varchar(15) NOT NULL default '',
`termin_WEEKDAY` varchar(20) NOT NULL default '',
`termin_LINK` varchar(150) NOT NULL default '',
`termin_USERID` int(14) NOT NULL default '0',
PRIMARY KEY (`termin_ID`)
) TYPE=MyISAM AUTO_INCREMENT=24 ;

Jetzt möchte ich alle Tage für diesen und nächsten Monat haben, die noch nicht vergangen sind.

SELECT *
FROM `termine`
WHERE `termin_DAY` >= RIght( CURRENT_DATE, 5 ) AND (
`termin_MONTH` = MONTH( DATE_ADD( NOW( ) ,
INTERVAL 0
MONTH ) ) OR `termin_MONTH` = MONTH( DATE_ADD( NOW( ) ,
INTERVAL 1
MONTH ) )
)
ORDER BY `termin_MONTH` , `termin_DAY` LIMIT 0 , 30

Das Problem ist jetzt, dass ich trotzdem noch den z.b. 9.6. zurück bekomme.

Wer kann da helfen?
 
Bekommst du alle Einträge dieses Monats zurück ?
Dann würde ich mal
Code:
`termin_DAY` >= RIght( CURRENT_DATE, 5 ) AND (
`termin_MONTH` = MONTH( DATE_ADD( NOW( ) ,
INTERVAL 0
MONTH ) )
in Klammern setzen.
Außerdem verstehe ich nicht ganz, warum du extra 0 Monate hinzufügst, aber das wird wohl kein Fehler sein.
 
Habe es auch so probiert:

SELECT *
FROM `termine`
WHERE (
(
`termin_DAY` >= RIght( CURRENT_DATE, 5 )
) AND (
`termin_MONTH` = MONTH( DATE_ADD( NOW( ) ,
INTERVAL 0
MONTH ) )
)
) OR (
`termin_MONTH` = MONTH( DATE_ADD( NOW( ) ,
INTERVAL 1
MONTH ) )
)
ORDER BY `termin_MONTH` , `termin_DAY`
LIMIT 0 , 30

leider ohne Erfolg
 
Nein, so meinte ich das nicht.
Ich meinte es so:
Code:
SELECT *
FROM `termine`
WHERE  ( `termin_DAY` >= RIght( CURRENT_DATE, 5 ) AND (
`termin_MONTH` = MONTH( DATE_ADD( NOW( ) ,
INTERVAL 0
MONTH ) ) )  OR `termin_MONTH` = MONTH( DATE_ADD( NOW( ) ,
INTERVAL 1
MONTH ) )
)
ORDER BY `termin_MONTH` , `termin_DAY` LIMIT 0 , 30

Da ich mir grad nicht so sicher bin, ob SQL OR oder AND als engere Bindung behandelt... würde aber (nach Überlegung) nicht das ergebnis liefern, dass du hast (gehe immer noch davon aus, dass du alle Einträge dieses Monats zurückbekommst).

Ansonsten bekommst du mit Right(Current_Date, 5) folgendes zurück:
Code:
von www.databasejournal.com
So, to return the 'MM-DD' portion of a date, you need to return the five rightmost characters, for example:

mysql> SELECT RIGHT(CURRENT_DATE(),5);
+-------------------------+
| RIGHT(CURRENT_DATE(),5) |
+-------------------------+
| 03-31                   |
+-------------------------+
In deiner Spalte 'termin_DAY' steht wahrscheinlich aber nur der Tag, oder ?
 
Ja, tut es.

Ich bin nicht so fit in der Materie, aber ich glaube ich müsste erst alle Tage vom Monat jetzigen Monat auswählen und davon nur noch Tag anzeigen, die größer gleich dem heutigen sind.

Also nochmal ne Unterabfrage oder so.
 
Was passiert denn, wenn du einfach nur die letzten 2 Zahlen mit deinem Tag abgleichst?
Den Monat hast du ja schon im nächsten Schritt.
 
Wie soll das aussehen?
Mit
`termin_MONTH` = MONTH( DATE_ADD( NOW( ) ,INTERVAL 1
bekomme ich nur den Monat "07" angezeigt.

mit
`termin_MONTH` = MONTH( DATE_ADD( NOW( ) ,INTERVAL 0

den Monat 06.
 
Code:
SELECT *
FROM `termine`
WHERE  ( `termin_DAY` >= RIght( CURRENT_DATE, 2  ) AND (
`termin_MONTH` = MONTH( DATE_ADD( NOW( ) ,
INTERVAL 0
MONTH ) ) )  OR `termin_MONTH` = MONTH( DATE_ADD( NOW( ) ,
INTERVAL 1
MONTH ) )
)
ORDER BY `termin_MONTH` , `termin_DAY` LIMIT 0 , 30
 
Zurück