MySQL - date funkcije - current date, now, add date, sub date, interval
Velikokrat je bolj modro, da že pri pridobivanju podatkov iz podatkovne baze opravite določene operacije nad MySQL polji tipa Date, DateTime, Time, Year, Timestamp. Zadeva je hitrejša kot, če iste operacije nato izvedemo nad vsemi vrsticami s pomočjo PHP-ja in na primer foreach konstrukta.
Kratek primer:
#1 Date polje s poljubnim formatom:
-
SELECT DATE_FORMAT( `DATE` , '%H:%i:%s' ) AS DATE FROM `table`
#2 Prečesamo celotno tabelo podatkov in spremenimo date polje
MySQL date funkcije:
#1 Currentdate - CURDATE( ) - CURRENT_DATE:
- SELECT CURDATE( ) AS `current_date` FROM `table` vrne 2008-06-05
- SELECT DATE_FORMAT( CURDATE( ) , '%d.%c.%Y' ) AS `current_date` FROM `table` vrne 05.6.2008
#2 NOW - NOW()
- SELECT NOW(); vrne 2008-06-05 14:25:31
- SELECT DATE_FORMAT(NOW() , '%d.%c.%Y' ) AS `current_date`; vrne 05.6.2008
#3 add date - ADDDATE - ADDTIME
- SELECT ADDDATE( '2007-01-01', 100 ); vrne 2007-04-11, k prvotnemu datumu dodamo 100 dni
- SELECT ADDDATE( '2007-01-01', '2007-04-11' ) ; vrne 2012-06-30, k prvotnemu datumu dodamo še drugi poljubni datum (isti format)
#4 sub date - DATE_SUB
Ista funkcionalnost kot ADDDATE, le da funkcija odšteje drugi parameter od prvega parametra (drugi datum odšteje od prvega datuma).
#5 interval - INTERVAL 31 DAY, INTERVAL 1 MONTH, INTERVAL 1 WEEK. Celotni seznam možnih vrednosti za INTERVAL
Interval keyword je moč uporabiti na skoraj vseh DATE funkcijah. Struktura je Datum +/- INTERVAL X Y oz. '2007-06-20' + INTERVAL 356 DAY;
- SELECT '2007-06-20' + INTERVAL 356 DAY; vrne 2008-06-1. Dodamo interval 356 dni, kar ni vedno ekvivalentno INTERVAL 1 YEAR!
- SELECT ADDDATE( '2008-06-20', 5 ) + INTERVAL 1 YEAR vrne 2009-06-25. Dodamo 5 dni ter interval 1 leto.
Poglejte si še ostale MySQL date funkcije kot so UNIX_TIMESTAMP, PERIOD_DIFF(), LAST_DAY, DATEDIFF.
Dodatne informacije:
- Praktični primeri pri PHP & MySQL date poljih
- Pretvorba polj tipa date iz MySQL s pomočjo PHP-ja
- Shranjevanje datumov v MySQL
Uporabljate MySQL date funkcije? Uporabljate še kakšne druge, kot je recimo TRIM? Imate tudi vi kakšen nasvet v povezavi z MySQL in PHP? Sporočite pod komentarje.

junij 12th, 2008 ob 12:30 dopoldne
Ja, ampak ce bos tako ali tako loopal skozi vrnjene vrstice, kar verjetno bos, potem je bolj smotrno pretvorbo v pravi format tik pred izpisom, oz. pac ko to rabis saj tako precej pospesis operacijo na bazi. Pa se, vsaj meni, je precej preprosteje na bazi imeti shranjene unix timestamp kot pa ta date polja.
junij 12th, 2008 ob 12:35 dopoldne
Jaz zaenkrat pri vseh svojih projektih uporabljam kar timestamp v INT polju ... Zaenkrat mi še vse deluje OK, pa tudi izgube hitrosti ne vidim oz občutim oz karkoli
Ne vem pa če je to OK, ker nisem nikoli gledal kakšnih drugih rešitev.
junij 12th, 2008 ob 9:14 dopoldne
Swizec, se strinjam. Primer je bil le kot ponazoritev koncepta. Vbistvu sem hotel le prikazati, da obstaja možnost pref-formatiranja na bazi in še veliko ostalih DATE funkcij.
Tudi jaz imam nekje shranjene UNIX_TIMESTAMP, vendar zadnje čase opažam, da mi je date bolj prijeten ker lahko pri izpisu takoj vidim datum (sicer v - - - obliki, ampak vseeno).
junij 12th, 2008 ob 1:25 popoldne
Kaj je torej boljša praksa? Pretvarjanje formata s pomočjo mysql ali s pomočjo PHP?
junij 12th, 2008 ob 7:12 popoldne
Če mene prašaš s MySQL, saj ti MySQL že ob pridobivanju rezultata vse skupaj formatira in pri PHP-ju potem le prikažeš. So pa najbrš razlike v hitrosti zelo zanemerljive, bolj pride do izraza število vrstic pri PHP-ju recimo zgoraj omenjeni primer, ko moraš potem s PHp-jam iti skozi vse rezultate (foreach) in popraviti datum.
junij 13th, 2008 ob 10:31 dopoldne
Sem bil tudi sam takega mnenja, pa sem vprašal, da vidim kakšno mnenje ima še kdo drug