Az SQL lekérdezések egyik gyakori feladata az adatok szűrése bizonyos időintervallumok alapján. Például előfordulhat, hogy csak azokat a rekordokat szeretnénk lekérdezni, ahol egy adott dátum nagyobb vagy egyenlő, mint az aktuális dátum mínusz 10 nap. Ezt többféle módon is meg lehet oldani SQL-ben, attól függően, hogy milyen adatbázis-kezelő rendszert használunk (MySQL, PostgreSQL, SQL Server stb.).
Az aktuális dátumhoz viszonyított szűrés SQL-ben
Az SQL nyelvben az aktuális dátumot a legtöbb rendszerben a következő függvényekkel lehet lekérdezni:
- MySQL:
CURDATE()
vagyNOW()
- PostgreSQL:
CURRENT_DATE
vagyNOW()
- SQL Server:
GETDATE()
A cél az, hogy csak azokat a tételeket listázzuk ki, ahol a Kezdés_datum
nagyobb vagy egyenlő, mint az aktuális dátum mínusz 10 nap.
Megoldások különböző SQL rendszerekben
1. MySQL megoldás
MySQL-ben a DATE_SUB()
függvényt használhatjuk a dátumok manipulálására:
SELECT * FROM tablazat_neve WHERE Kezdés_datum >= DATE_SUB(CURDATE(), INTERVAL 10 DAY);
A DATE_SUB()
függvény az aktuális dátumból kivon 10 napot, és csak azokat az eredményeket adja vissza, amelyek nagyobbak vagy egyenlők ennél az értéknél.
2. PostgreSQL megoldás
PostgreSQL-ben a NOW()
vagy CURRENT_DATE
függvényt kombinálhatjuk az INTERVAL
operátorral:
SELECT * FROM tablazat_neve WHERE Kezdés_datum >= CURRENT_DATE - INTERVAL '10 days';
Itt a CURRENT_DATE
mínusz INTERVAL '10 days'
adja meg a szűrés alapját.
3. SQL Server megoldás
SQL Serverben a DATEADD()
függvény használható az időszámításra:
SELECT * FROM tablazat_neve WHERE Kezdés_datum >= DATEADD(DAY, -10, GETDATE());
A DATEADD()
függvény segítségével kivonunk 10 napot a jelenlegi dátumból, így az adott intervallumban lévő rekordokat kapjuk meg.
4. Alternatív megoldás: DATEDIFF használata
Bizonyos esetekben a DATEDIFF()
függvény is alkalmazható, például így:
SELECT * FROM tablazat_neve WHERE DATEDIFF(Kezdés_datum, CURRENT_DATE) BETWEEN -9 AND 0;
Itt a DATEDIFF()
kiszámolja a különbséget a Kezdés_datum
és a mai dátum között, és csak azokat az értékeket adja vissza, amelyek az elmúlt 10 napban vannak.
Összegzés
A fenti példák alapján látható, hogy az SQL lekérdezésben többféle módon is megoldható az időintervallumok alapján történő szűrés. A legmegfelelőbb módszer kiválasztása az adott adatbázis-kezelőtől és az egyedi igényektől függ.
Ha MySQL-t használsz, a DATE_SUB()
, ha PostgreSQL-t, akkor az INTERVAL
, ha pedig SQL Servert, akkor a DATEADD()
lehet a legjobb megoldás.
Amennyiben bizonytalan vagy abban, hogy melyik módszer működik a saját környezetedben, érdemes tesztelni őket egy kis mintatáblázaton.