SQL
SQL KOULUTUSTA VUONNA 2025!
-
SQL koulutus
-
MySQL koulutus
-
Microsoft SQL Server ylläpto koulutus
-
Microsoft SQL Server - kyselyjen optimointi ja tuning koulutus
-
Microsoft Access koulutus
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;