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.
mysql> SELECT NOW(), NOW()-4;
+---------------------+----------------+
| NOW() | NOW()-4 |
+---------------------+----------------+
| 2004-06-16 15:14:04 | 20040616151400 |
+---------------------+----------------+
1 row in set (0.03 sec)
|
Liknande metoder är CURRENT_DATE() och CURRENT_TIME() som returnerar en DATE respektive en TIME:
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:
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)
|
Nedan testas DAY-funktionerna:
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)
|
Med TO_DAYS() kan man omvandla DATE-typen till antal dagar sedan år 0. FROM_DAYS() fungerar tvärt om:
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:
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)
|
Nedan testas övriga tidsfunktioner:
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)
|
Med TIME_TO_SEC() kan man omvandla TIME-typen till antal sekunder sedan midnatt. SEC_TO_TIME() fungerar tvärt om:
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)
|