programmera.net -> mysql -> normal för utskrift | info@programmera.net |
Datumfunktioner
1. Datumfunktioner 2. DATE_FORMAT() 3. TIME_FORMAT() 4. Hämta datorns klockslag 5. DATE_ADD() och DATE_SUB() 6. DATE-funktioner 7. TIME-funktioner |
1. Datumfunktioner
På grund av datumens oregelbundna natur finns många funktioner för datum.
2. DATE_FORMAT()
Med denna funktion kan du omforma ett datum av typen DATETIME eller DATE till en sträng som motsvarar dina behov.
Formatnycklar Beskrivning %Y År med fyra siffror. %y År med två siffror. %M Månadsnamn (January,..). %b Månadsnamn, förkortat (Jan,Feb,..). %m Månadsnummer (1..12). %V Veckonummer, söndag först dagen (01..53). (Använd %X istället för %Y) %v Veckonummer, måndag först dagen (01..53). (Använd %x istället för %Y) %j Dag på året (001..356). %d Dag i månaden (01..31). %e Dag i månaden (1..31). %W Veckodagsnamn (Sunday, Monday,..). %a Veckodagsnamn, förkortat (Sun, Mon,..). %w Veckodagsnummer (0=Söndag, 1=Måndag,..). %H Timme (00..23). %h Timme (01..12). %p AM eller PM. %i Minuter (00..59). %s Sekunder.
Nedan ges några exempel på hur DATE_FORMAT() används:
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
+------------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s') |
+------------------------------------------------+
| 22:23:00 |
+------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_FORMAT('1997-10-04 00:23:00', '%x Week %v');
+--------------------------------------------------+
| DATE_FORMAT('1997-10-04 00:23:00', '%x Week %v') |
+--------------------------------------------------+
| 1997 Week 40 |
+--------------------------------------------------+
1 row in set (0.00 sec)
3. TIME_FORMAT()
Funktionen TIME_FORMAT(time,format) fungerar som DATE_FORMAT(date,format) med skillnaden att den förra opererar på typen TIME och kan bara formattera till timmar, minuter och sekunder. Samma formatnycklar som ovan används. Ett exempel:
mysql> SELECT TIME_FORMAT("02:13:44","%i");
+------------------------------+
| TIME_FORMAT("02:13:44","%i") |
+------------------------------+
| 13 |
+------------------------------+
1 row in set (0.00 sec)
4. Hämta datorns klockslag
Med funktionen NOW() hämtar du det aktuella datumet (av typen DATETIME). Svaret returneras antingen som en sträng eller ett heltal beroende på omständigheterna.
Liknande metoder är CURRENT_DATE() och CURRENT_TIME() som returnerar en DATE respektive en TIME:
mysql> SELECT NOW(), NOW()-4;
+---------------------+----------------+
| NOW() | NOW()-4 |
+---------------------+----------------+
| 2004-06-16 15:14:04 | 20040616151400 |
+---------------------+----------------+
1 row in set (0.03 sec)
mysql> SELECT NOW(), CURRENT_DATE(), CURRENT_TIME();
+---------------------+----------------+----------------+
| NOW() | CURRENT_DATE() | CURRENT_TIME() |
+---------------------+----------------+----------------+
| 2004-06-18 15:15:49 | 2004-06-18 | 15:15:49 |
+---------------------+----------------+----------------+
1 row in set (0.00 sec)
5. DATE_ADD() och DATE_SUB()
Två funktioner förändrar en tidpunkt:
Datumfunktion Beskrivning DATE_ADD(date, interval) Lägger till ett tidsintervall till ett datum. DATE_SUB(date, interval) Subtraherar ett tidsintervall från ett datum.
Datumet "date" kan vara av typen DATETIME eller DATE. DATE_ADD() och DATE_SUB() använder sig av följande syntax när det gäller att definiera det intervall som ska läggas till: "INTERVAL NR Enhet". Här kommer några exempel på hur DATE_ADD() och DATE_SUB() fungerar:
mysql> SELECT DATE_ADD("2004-12-12 22:07:53", INTERVAL 1 SECOND);
+----------------------------------------------------+
| DATE_ADD("2004-12-12 22:07:53", INTERVAL 1 SECOND) |
+----------------------------------------------------+
| 2004-12-12 22:07:54 |
+----------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_ADD("040601", INTERVAL 1 DAY);
+------------------------------------+
| DATE_ADD("040601", INTERVAL 1 DAY) |
+------------------------------------+
| 2004-06-02 |
+------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_SUB("040601", INTERVAL 5 YEAR);
+-------------------------------------+
| DATE_SUB("040601", INTERVAL 5 YEAR) |
+-------------------------------------+
| 1999-06-01 |
+-------------------------------------+
1 row in set (0.00 sec)
6. DATE-funktioner
Här ges en lista på olika funktioner som alla opererar på DATE-typen:
Datumfunktion Beskrivning YEAR(date) Returnerar året för datumet. QUARTER(date) Returnerar kvartalet. MONTH(date) Returnerar månadens nummer (1-12). MONTHNAME(date) Returnerar månadens namn. WEEK(date) Returnerar veckans nummer (1-53). DAYNAME(date) Returnerar namnet på veckodagen. DAYOFWEEK(date) Returnerar veckodagens ordningsnummer. DAYOFMONTH(date) Returnerar månadsdagen. DAYOFYEAR(date) Returnerar hur många dagar som har gått på året. TO_DAYS(date) Returnerar hur många dagar som sedan år 0. FROM_DAYS(nr) Returnerar ett datum från hur många dagar som sedan år 0.
Nedan testas några datumfunktioner:
Nedan testas DAY-funktionerna:
mysql> SELECT WEEK("040601"), MONTH("040601"), MONTHNAME("040601"), YEAR("040601");
+----------------+-----------------+---------------------+----------------+
| WEEK("040601") | MONTH("040601") | MONTHNAME("040601") | YEAR("040601") |
+----------------+-----------------+---------------------+----------------+
| 22 | 6 | June | 2004 |
+----------------+-----------------+---------------------+----------------+
1 row in set (0.02 sec)
mysql> SELECT QUARTER("040601");
+-------------------+
| QUARTER("040601") |
+-------------------+
| 2 |
+-------------------+
1 row in set (0.00 sec)
Med TO_DAYS() kan man omvandla DATE-typen till antal dagar sedan år 0. FROM_DAYS() fungerar tvärt om:
mysql> SELECT DAYNAME("040601"), DAYOFWEEK("040601"), DAYOFMONTH("040601"), DAYOFYEAR("040601");
+-------------------+---------------------+----------------------+---------------------+
| DAYNAME("040601") | DAYOFWEEK("040601") | DAYOFMONTH("040601") | DAYOFYEAR("040601") |
+-------------------+---------------------+----------------------+---------------------+
| Tuesday | 3 | 1 | 153 |
+-------------------+---------------------+----------------------+---------------------+
1 row in set (0.00 sec)
mysql> SELECT TO_DAYS("040601"), FROM_DAYS(732099);
+-------------------+-------------------+
| TO_DAYS("040601") | FROM_DAYS(732099) |
+-------------------+-------------------+
| 732098 | 2004-06-02 |
+-------------------+-------------------+
1 row in set (0.00 sec)
7. TIME-funktioner
Här ges en lista på olika funktioner som alla opererar på TIME-typen:
Tidfunktion Beskrivning TIME_FORMAT(time, format) Formatterar ett datum till att skrivas ut på ett speciellt sätt. HOUR(time) Returnerar timmar. MINUTE(time) Returnerar minuter. SECOND(time) Returnerar sekunder. TIME_TO_SEC(time) Returnerar antal sekunder sedan midnatt. SEC_TO_TIME(sec) Omvandlar ett heltal till en tidpunkt (TIME).
TIME_ADD() och TIME_SUB() använder sig av följande syntax när det gäller att definiera det intervall som ska läggas till: "INTERVAL NR Enhet". Här kommer några exempel på hur TIME_ADD() och TIME_SUB() fungerar:
Nedan testas TIME-funktionerna:
Nedan testas övriga tidsfunktioner:
mysql> SELECT DAYNAME("040601"), DAYOFWEEK("040601"), DAYOFMONTH("040601"), DAYOFYEAR("040601"), TO_DAYS("040601");
+-------------------+---------------------+----------------------+---------------------+-------------------+
| DAYNAME("040601") | DAYOFWEEK("040601") | DAYOFMONTH("040601") | DAYOFYEAR("040601") | TO_DAYS("040601") |
+-------------------+---------------------+----------------------+---------------------+-------------------+
| Tuesday | 3 | 1 | 153 | 732098 |
+-------------------+---------------------+----------------------+---------------------+-------------------+
1 row in set (0.00 sec)
Med TIME_TO_SEC() kan man omvandla TIME-typen till antal sekunder sedan midnatt. SEC_TO_TIME() fungerar tvärt om:
mysql> SELECT HOUR("22:07:56"), MINUTE("22:07:56"), SECOND("22:07:56");
+------------------+--------------------+--------------------+
| HOUR("22:07:56") | MINUTE("22:07:56") | SECOND("22:07:56") |
+------------------+--------------------+--------------------+
| 22 | 7 | 56 |
+------------------+--------------------+--------------------+
1 row in set (0.00 sec)
mysql> SELECT TIME_TO_SEC("22:07:56"), SEC_TO_TIME(2344);
+-------------------------+-------------------+
| TIME_TO_SEC("22:07:56") | SEC_TO_TIME(2344) |
+-------------------------+-------------------+
| 79676 | 00:39:04 |
+-------------------------+-------------------+
1 row in set (0.00 sec)