SQL - SQL Dates (Datum) i Times (Vrijeme)


Manipulacija datumom i vremenom

Uz stringove i brojeve, često trebate pohraniti vrijednosti datuma i / ili vremena u bazu podataka, kao što su datum rođenja korisnika, datum zapošljavanja zaposlenog, datum budućih događaja, datum i vrijeme kada je određeni red kreiran ili modifikovan u tabelu i tako dalje.

Ova vrsta podataka naziva se privremenim podacima i svaki mehanizam baze podataka ima zadani format za pohranu i tipove podataka za njihovo spremanje. Sljedeća tabela prikazuje tipove podataka koje MySQL poslužitelj baze podataka podržava za rukovanje datumima i vremenima.

Tip Difoltni format Dopuštene vrijednosti
DATE YYYY-MM-DD 1000-01-01 do 9999-12-31
TIME HH:MM:SS or HHH:MM:SS -838:59:59 do 838:59:59
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 do 9999-12-31 23:59:59
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:00 do 2037-12-31 23:59:59
YEAR YYYY 1901 do 2155

Vrijednosti DATUMA (DATE) imaju format GGGG-MM-DD, gdje GGGG predstavljaju cijelu godinu (4 znamenke), dok MM i DD predstavljaju dijelove mjeseca i dana (dvije znamenke s početnom nulom). Isto tako, vrijednosti TIME obično imaju format HH: MM: SS, gdje HH, MM i SS predstavljaju sate, minute i sekunde dijelova vremena. Sljedeća izjava pokazuje kako umetnuti vrijednost datuma u tabelu baze podataka:

INSERT INTO employees (emp_name, hire_date, salary)
VALUES ('Milos Mihaljica', '2015-06-24', 4500);


Praćenje vremena stvaranja ili izmjene redova

Dok radite s bazom podataka velike aplikacije, često trebate pohraniti vrijeme kreiranja zapisa ili vrijeme posljednje izmjene u svojoj bazi podataka, na primjer, pohranu datuma i vremena kada se korisnik prijavi ili kada je korisnik zadnji put ažurirao lozinku itd. U MySQL možete koristiti funkciju NOW() za umetanje trenutne vremenske oznake, kao u primjeru:

-- Sintaksa za MySQL Database 
INSERT INTO users (name, birth_date, created_at)
VALUES ('Bilbo Baggins', '1998-04-16', NOW());

Međutim, ako ne želite ručno umetnuti trenutni datum i vrijeme, možete jednostavno koristiti svojstva automatske inicijalizacije i automatskog ažuriranja tipova podataka TIMESTAMP i DATETIME. Da biste dodijelili automatska svojstva, navedite DEFAULT CURRENT_TIMESTAMP i ON UPDATE CURRENT_TIMESTAMP odredbe u definicijama kolona, kako slijedi:

-- Sintaksa za MySQL Database 
CREATE TABLE users (
    id INT(4) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL UNIQUE,
    birth_date DATE NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);


Izdvajanje dijelova datuma ili vremena

Možda postoje situacije u kojima samo želite dobiti dio datuma ili vremena. U MySQL-u možete koristiti funkcije posebno dizajnirane za izdvajanje dijela vremenske vrijednosti, poput YEAR(), MONTH(), DAYOFMONTH(), MONTHNAME(), DAYNAME(), HOUR(), MINUTE(), SECOND() itd. Sljedeći SQL izraz izdvojit će dio dijela vrijednosti kolone birth_date, npr. ako je datum rođenja bilo kojeg korisnika 1987-01-14, YEAR(birth_date) vratit će 1987.

mysql> SELECT name, YEAR(birth_date) FROM users;

Slično tome, možete koristiti funkciju DAYOFMONTH() da biste dobili dan u mjesecu, npr. ako je datum rođenja bilo kojeg korisnika 1986-10-06, DAYOFMONTH(birth_date) će vratiti 6.

mysql> SELECT name, DAYOFMONTH(birth_date) FROM users;


Formatiranje datuma ili vremena

Ako želite više opisnog i čitljivog formata datuma u vašem skupu rezultata, možete koristiti funkcije DATE_FORMAT() i TIME_FORMAT() za ponovno formatiranje postojećih vrijednosti datuma i vremena. Sljedeći SQL izraz oblikovat će vrijednosti kolone datum rođenja korisničke tabelu u čitljiviji format, poput vrijednosti 1987-01-14 do 14. januar 1987.

mysql> SELECT name, DATE_FORMAT(birth_date, '%M %e, %Y') FROM users;