Hogyan szűrjünk SQL lekérdezésben egy dátumhoz képest adott időintervallumban?

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() vagy NOW()
  • PostgreSQL: CURRENT_DATE vagy NOW()
  • 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.

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük