Jag vill hämta data för den aktuella månaden som skall in i en rapport. Hur gör man det i en SQL-sats utan att behöva hårdkoda datumintervallen (t.ex. 1sept-30sept)? enklaste är ju att du sätter villkoret: Jag vet inte om jag missförstått ditt svar. Men jag förstår det som att jag måste skriva in aktuell månad och dag i SQL-satsen för varje månad manuellt? Jag menar att jag kan använda WHERE-villkoret som du angett ovan för september månad, men när jag vill ta ut data för oktober, så får jag manuellt gå in och ändra i SQL-satsen igen? nej, det behöver du inte. jag förutsatte bara att du skapade sql-satsen ifrån t.ex. vbscript eller liknande, men det finns ingenting som hindrar att du löser det på annat sätt, med sql:s inbyggda funktioner. Det är dock ingenting som jag kan, men det är med all säkerhet inget svårt problem. Det är fortfarande det sätt som jag skrev som man löser det på, även om detaljerna kan skilja Något som detta? Oskar: Okej, lite ouppmärksam där. Hm, kikade på länkarna jag fick, men de verkar ju vara för användning i VBA och inte i en SQL-sats :( Det går att utföra sql via vba. Den del som är sql är samma oavsett om du använder vba för utföra den eller om du använder den direkt i frågedesignen.Hur hämta data för aktuell månad i SQL-sats?
Eller finns det någon annan lösning som är bättre? T.ex. låta användaren välja start- och slutdatum i kalender på ett formulär, och använda de värdena i SQL-satsen sen?
Tacksam för hjälp!
Mvh RamonSv: Hur hämta data för aktuell månad i SQL-sats?
where year(datum_i_tabell) = 2009 and month(datum_i_tabell) = 9
Det ger allting för september 2009. Dock: dålig prestanda.
Bättre prestanda, och bättre lösning:
where datum_i_tabell >= #2009-09-01 00:00:00# and datum_i_tabell < #2009-10-01 00:00:00#
Den kräver att du i förväg sätter ihop datumet. Det är dock inte så komplicerat, börja med att bara sätta ihop aktuellt årtal med aktuell månad, sedan 01 och ev. tiden om det är ett sådant kombinerat datum och tidsfält. Det andra datumet får du helt enkelt genom att köra dateadd med en månad på ditt första datum.Sv:Hur hämta data för aktuell månad i SQL-sats?
Sv: Hur hämta data för aktuell månad i SQL-sats?
Sv: Hur hämta data för aktuell månad i SQL-sats?
select * from tblGettheData
WHERE Datepart(m,TheDate) = Datepart(m,getDate()) And
Datepart(yy,TheDate) = Datepart(yy,getdate())
//Ann
__________________
Edit, detta funkar således på innevarande månad och data måste hämtas i innevarande månad.
I annat fall behövs en kalender e.d.Sv:Hur hämta data för aktuell månad i SQL-sats?
Jag har inte skrivit SQL-satsen i VBA, utan har sparat den som en fråga som jag sedan använder när jag skapar rapporten. Skriva liknande som du gjort (vilket jag gjort hittills), dvs:
where datum_i_tabell >= #2009-09-01 00:00:00# and datum_i_tabell < #2009-10-01 00:00:00#
fungerar ju, men då måste jag ju gå in i SQL-satsen varje månad och ändra månaderna? Är inte med på hur detta skulle ske automatiskt?
Mitt WHERE-uttryck som jag använt ser ut så här:
WHERE datum BETWEEN #9/1/2009# AND #9/30/2009#
Ann:
Testade koden, men getdate() verkar inte stödjas av alla SQL-implementationer, bl.a. den som finns i MS Access. Sv: Hur hämta data för aktuell månad i SQL-sats?
Kika på länken och testa med date . Längst ned på sidan har du funktioner för att plocka fram första och sista dagen i aktuell, föregående och kommande månad.
Genom att använda dem kan du komma runt att mata in datum så det räcker med att välja månad?
http://articles.techrepublic.com.com/5100-10878_11-6135056.html
Här har du lite mer datumfunktioner.
http://www.alvechurchdata.co.uk/accdate.htm
Det är en sammanställning men om du googlar på dem tror jag säkert du hittar exempel.
//AnnSv:Hur hämta data för aktuell månad i SQL-sats?
Sv: Hur hämta data för aktuell månad i SQL-sats?
För att välja alla datum i innevarande månad gör en fråga i Access som ser ut så här:
MELLAN DatumSerie(År(Datum());Månad(Datum());1) OCH DatumSerie(År(Datum());Månad(Datum());1)
http://www.kapborg.se/ps091013.png
Det är det översta exemplet i den första länken jag gav dig. Du kan modifiera enligt de övriga.
Current month
FirstDay = DateSerial(Year(date), Month(date), 1)
LastDay = DateSerial(Year(date), Month(date) + 1, 0)
Previous month
FirstDay = DateSerial(Year(date), Month(date) - 1, 1)
LastDay = DateSerial(Year(date), Month(date), 0)
Next month
FirstDay = DateSerial(Year(date), Month(date) + 1, 1)
LastDay = DateSerial(Year(date), Month(date) + 2, 0)
<b>EDIT:</b> Exemplet ger bara dag 1 i månaden, om du ändrar sist i exemplet som LastDay ser ut blir det rätt.