Fråga: Vad ska du använda fjärde kolumnen till (den som inte har nåt namn i exemplet, men vi kan kalla den 'Something_5' ;-)? Om du bara ska använda den för att testa om det är rätt dag / månad för att posten ska användas, så är väl det enklaste sättet att låta databasen ta hand om det och bara returnera de poster du vill ha? Om du tänker dig hur en if-elsesats kommer att se ut i förlängningen, när du vill kolla efter den hundrade sexmånadersperioden, så blir det en lite otymplig SQL-sats du får.
Om vi antar att du endast vill kolla om datumet ligger i en jämn sexmånadersperiod bakåt, så borde du kunna lösa det med en WHERE klausul, ungefär så här: SELECT a AS vettigt_namn_1, b as vettigt_namn_2 FROM vettigt_tabellnamn WHERE MOD(PERIOD_DIFF(DATE_FORMAT(c, '%Y%m%d'), DATE_FORMAT(CURDATE(), '%Y%m%d')),6) = 0; Detta baserat på antagandet att du vill räkna kalendermånader och inte nånting bokföringsobskyrt som 30 dagarsperioder. ;-) c är alltså namnet på den kolumn du vill matcha kalenderkollen mot. Det blir lite rörigt eftersom man måste göra om datumen till strängar för PERIOD_DIFF(). Sen bara kollar vi om vi får nån rest vid division med 6. Får vi inte det så är det exakt 6, 12, 18, 24 o.s.v. månader sen. Vill du se om händelsen inträffar under den närmaste månaden? Byt ut = 0 mot <= 1. Så här: SELECT a AS vettigt_namn_1, b as vettigt_namn_2 FROM vettigt_tabellnamn WHERE MOD(PERIOD_DIFF(DATE_FORMAT(c, '%Y%m%d'), DATE_FORMAT(CURDATE(), '%Y%m%d')),6) <= 1; Just ja, du kanske bara vill ha med de händelser som inträffar under eller efter dagens datum i varje månad också? Då lägger vi till en WHERE sats med DAYOFMONTH(): DAYOFMONTH(c) >= DAYOFMONTH(CURDATE()) Så hela satsen ser ut så här: SELECT a AS vettigt_namn_1, b as vettigt_namn_2 FROM vettigt_tabellnamn WHERE MOD(PERIOD_DIFF(DATE_FORMAT(c, '%Y%m%d'), DATE_FORMAT(CURDATE(), '%Y%m%d')),6) <= 1 AND DAYOFMONTH(c) >= DAYOFMONTH(CURDATE()); Lycka till! __ /ony ------- Thursday, May 6, 2004, 10:40:17 AM, you wrote: > Hej > Försöker köra ett IF statement i MYSQL men det verkar inte fungera. > Jag kör följande >> USE databas >> SELECT Item_A AS 'Something 1', >> Item_B AS 'Something 2', >> Item_C AS 'Something 3', >> INTERVAL 6 MONTH + Item_B AS 'Something 4', >> BEGIN IF CURDATE() >= INTERVAL 6 MONTH + Item_C THEN SELECT INTERVAL 12 >> MONTH + Item_C >> [ELSEIF CURDATE() >= INTERVAL 12 MONTH + Item_C THEN SELECT INTERVAL 18 >> MONTH + Item_C] >> ELSE INTERVAL 6 MONTH + Item_C) >> END IF >> FROM Table ; > Vad jag vill göra är följande; > Jag har en post "Item_C" som är ett datum. Sex månader efter Item_C > skall en händelse inträffa, sedan skall den händelsen fortsätta att > inträffa var 6:e månad intill dess att den post som Item_C är kopplad > till får status "Upphörd". > Med IF satsen har jag försöker jag åstadkomma följande; > Om dagensdatum är större än eller lika med Item_C + 6 månader då skall i > stället Item_C + 12 månader osv användas. > Tanken är att om Item_C + 6 månader ger ett resultat som är "dåtid" dvs > ligger i tiden före dagens datum då skall i stället närmast period efter > dagens datum sökas och visas. > Nästa steg är att bara visa resultatet om föregående stycke är lika med > att resultat infaller under nästkommande månad. > Det var lite invecklat det här...men om någon har lust eller känner sig > hugad att bidra med synpunkter osv så tas det tacksamt emot. > Thomas