SQL

SQL KOULUTUSTA VUONNA 2025!

Kurssit saatavilla kautta Suomen. Tule ja varaa oma koulutustapahtumasi heti! Koulutuksen järjestää asiantuntijasi Koulutus- ja konsultointipalvelu KK Mediat.

Päivämäärien ja aikaleimojen käsittely SQL:ssä – yleisimmät funktiot

Tässä osiossa käsitellään yleisimpiä SQL:n päivämäärä- ja aikafunktioita eri tietokannoissa (esim. Microsoft Access, SQL Server, MySQL ja Oracle). Funktioiden nimet ja tarkka toiminta vaihtelevat tietokannan mukaan, joten on tärkeää tarkistaa oman järjestelmän dokumentaatio.

Kuinka hakea nykyinen päivämäärä tai kellonaika SQL:ssä

Nykyisen päivämäärän tai kellonajan hakeminen SQL:ssä on hyödyllistä esimerkiksi suodattamiseen, aikaleiman tallentamiseen tai ajankohtaiseen raportointiin. Eri tietokannat tarjoavat tähän omat funktionsa, kuten CURRENT_DATE, NOW(), GETDATE(), SYSDATE tai Date():


-- Oracle: SYSDATE, SYSTIMESTAMP
SELECT Merkki, Malli, Saapumispvm 
FROM Autot 
WHERE Saapumispvm = SYSDATE;

-- MySQL: CURRENT_DATE, NOW()
SELECT Merkki, Malli, Saapumispvm 
FROM Autot 
WHERE Saapumispvm = CURDATE();

-- MS SQL Server: GETDATE(), CURRENT_TIMESTAMP
SELECT Merkki, Malli, Saapumispvm 
FROM Autot 
WHERE Saapumispvm = CAST(GETDATE() AS DATE);

-- Microsoft Access: Date(), Now() 
SELECT Merkki, Malli, Saapumispvm 
FROM Autot 
WHERE Saapumispvm = Date();

Päivämäärien ja aikaleimojen vertailu SQL:ssä tapahtuu tavallisilla vertailuoperaattoreilla, kuten < (ennen), > (jälkeen) tai = (yhtäsuuruus).

Kuinka laskea kahden päivämäärän tai aikaleiman välinen ero SQL:ssä

Päivämäärien välinen ero voidaan laskea useimmissa SQL-järjestelmissä joko kokonaisten aikayksiköiden (päivien, kuukausien, vuosien) tai tarkkojen aikaleimaerojen muodossa.


-- Oracle: päivämäärät voi vähentää toisistaan
SELECT Merkki, Malli, Saapumispvm, Tilauspvm,
       Saapumispvm - Tilauspvm AS Paivien_ero
FROM Autot;

-- MySQL: DATEDIFF()
SELECT Merkki, Malli, Saapumispvm, Tilauspvm,
       DATEDIFF(Saapumispvm, Tilauspvm) AS Paivien_ero
FROM Autot;

-- MS SQL Server: DATEDIFF() - huomaa eri järjestys kuin MysQL:ssä
SELECT Merkki, Malli, Saapumispvm, Tilauspvm,
       DATEDIFF(DAY, Tilauspvm, Saapumispvm) AS Paivien_ero
FROM Autot;

-- Microsoft Access: DateDiff()
SELECT Merkki, Malli, Saapumispvm, Tilauspvm,
       DateDiff("d", Tilauspvm, Saapumispvm) AS Paivien_ero
FROM Autot;


Kuinka laskea tuleva tai mennyt ajankohta SQL:n avulla

SQL:ssä on mahdollista laskea tulevia tai menneitä päivämääriä lisäämällä tai vähentämällä eri ajan yksiköitä alkuperäiseen päivämäärään.


-- Oracle: ADD_MONTHS(), tai suorita laskutoimitus
SELECT Merkki, Malli 
FROM Autot 
WHERE ADD_MONTHS(Saapumispvm, 1) > Odotettupvm;
-- lisää 7 päivää 
SELECT Saapumispvm + 7 AS Uusi_pvm
FROM Autot;


-- MYSQL: DATE_ADD(), DATE_SUB
-- Lisää 1 kuukausi
SELECT DATE_ADD(Saapumispvm, INTERVAL 1 MONTH) AS Uusi_pvm
FROM Autot;
-- Vähennä 7 päivää
SELECT DATE_SUB(Saapumispvm, INTERVAL 7 DAY) AS Uusi_pvm
FROM Autot;


-- MS SQL Server: DATEADD()
-- Lisää 1 kuukausi
SELECT DATEADD(MONTH, 1, Saapumispvm) AS Uusi_pvm
FROM Autot;
-- Vähennä 7 päivää
SELECT DATEADD(DAY, -7, Saapumispvm) AS Uusi_pvm
FROM Autot;



-- Microsoft Access: DateAdd()
-- Lisää 1 kuukausi
SELECT DateAdd("m", 1, Saapumispvm) AS Uusi_pvm
FROM Autot;
-- Vähennä 7 päivää
SELECT DateAdd("d", -7, Saapumispvm) AS Uusi_pvm
FROM Autot;

Kuinka muotoilla aikaleima esitystä varten SQL:n avulla

Usein päivämäärä pitää esittää tietyssä muodossa, kuten DD.MM.YYYY tai YYYY-MM-DD. Tämä onnistuu eri funktioilla eri järjestelmissä:


-- Oracle: TO_CHAR()
SELECT TO_CHAR(Saapumispvm, 'DD.MM.YYYY') AS MuotoiltuPvm
FROM Autot;

-- MySQL: DATE_FORMAT()
SELECT DATE_FORMAT(Saapumispvm, '%d.%m.%Y') AS MuotoiltuPvm
FROM Autot;

-- MSSQL, Access:  FORMAT()
SELECT FORMAT(Saapumispvm, 'dd.MM.yyyy') AS MuotoiltuPvm
FROM Autot;


Kuinka poimia yksityiskohtia aikaleimasta SQL:n avulla

Toinen yleinen tarve on poimia tietystä päivämäärästä esim. vuosi, kuukausi tai viikonpäivä. Alla esimerkkejä:


-- Oracle: EXTRACT + YEAR_FROM()/ MONTH_FROM()/ DAY_FROM()
SELECT EXTRACT(YEAR FROM Saapumispvm) AS Vuosi,
       EXTRACT(MONTH FROM Saapumispvm) AS Kuukausi,
       EXTRACT(DAY FROM Saapumispvm) AS Paiva
FROM Autot;


-- MySQL, MSSQL, Access: YEAR(), MONTH(), DAY()
SELECT YEAR(Saapumispvm) AS Vuosi,
       MONTH(Saapumispvm) AS Kuukausi,
       DAY(Saapumispvm) AS Paiva
FROM Autot;