logo

INTERNETNE STORITVE

- IZDELAVA SPLETNIH STRANI - OBLIKOVANJE - PROGRAMIRANJE DODATKOV

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:

MySQL:
  1. SELECT DATE_FORMAT( `DATE` , '%H:%i:%s' ) AS DATE FROM `table`

#2 Prečesamo celotno tabelo podatkov in spremenimo date polje

PHP:
  1. foreach($rowsFromMySQL as $rowKey => $row) {
  2.     $rowsFromMySQL[$rowKey]['date'] = date('H:i:s', strtotime($row['date']));
  3. }

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:

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.

6x komentirano na “MySQL - date funkcije - current date, now, add date, sub date, interval”

  1. Swizec je napisal:

    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.

  2. modman je napisal:

    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.

  3. Roky je napisal:

    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).

  4. smottt je napisal:

    Kaj je torej boljša praksa? Pretvarjanje formata s pomočjo mysql ali s pomočjo PHP?

  5. Roky je napisal:

    Č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.

  6. smottt je napisal:

    Sem bil tudi sam takega mnenja, pa sem vprašal, da vidim kakšno mnenje ima še kdo drug :)

Dodaj komentar