I MySQL, DATE_FORMAT()
funktionen låter dig formatera datum och tid.
Här är ett exempel:
SELECT DATE_FORMAT('2018-12-01', '%W, %d %M %Y');
Resultat:
Saturday, 01 December 2018
I det här exemplet, %W
är för veckodagsnamnet, %d
är för dagen i månaden, %M
är för månad och %Y
är för år. Det finns många fler formatspecifikare tillgängliga som gör att du kan ange ett exakt format för datum, såväl som tidskomponenten.
Formatera tidskomponenten
Här är ett exempel på formatering av tidskomponenten:
SELECT DATE_FORMAT('2018-12-01 11:03:15', '%H:%i:%s %p');
Resultat:
11:03:15 AM
I det här exemplet, %p
används för att visa antingen AM eller PM, beroende på vilket som är fallet.
Naturligtvis kan du kombinera dem för att formatera både datum och tid på en gång:
SELECT DATE_FORMAT('2018-12-01 11:03:15', '%H:%i:%s %p, %W, %d %M %Y');
Resultat:
11:03:15 AM, Saturday, 01 December 2018
Formatera med en datum/tid-funktion
Ofta vill du använda DATE_FORMAT()
tillsammans med en annan datum/tid-funktion. Du kan till exempel använda den tillsammans med CURDATE()
för att returnera det aktuella datumet, snyggt formaterat:
SELECT CURDATE() AS Unformatted, DATE_FORMAT(CURDATE(), '%W, %M %d, %Y') AS Formatted;
Resultat:
+-------------+----------------------+ | Unformatted | Formatted | +-------------+----------------------+ | 2018-05-04 | Friday, May 04, 2018 | +-------------+----------------------+
Du kan också göra detta med NOW()
funktion om du behöver tid:
SELECT NOW() AS Unformatted, DATE_FORMAT(NOW(), '%r') AS Formatted;
Resultat:
+---------------------+-------------+ | Unformatted | Formatted | +---------------------+-------------+ | 2018-05-04 14:33:52 | 02:33:52 PM | +---------------------+-------------+
FUNKTIONEN TIME_FORMAT()
MySQL har också en TIME_FORMAT()
funktion som kan användas för att formatera tiden. Den här funktionen fungerar på samma sätt som DATE_FORMAT()
förutom att TIME_FORMAT()
accepterar bara formatspecifikationer endast för timmar, minuter, sekunder och mikrosekunder.
Exempel:
SET @time = '07:35:10'; SELECT TIME_FORMAT(@time, '%H') AS Hour, TIME_FORMAT(@time, '%i') AS Minute, TIME_FORMAT(@time, '%s') As Seconds, TIME_FORMAT(@time, '%p') AS 'AM or PM';
Resultat:
+------+--------+---------+----------+ | Hour | Minute | Seconds | AM or PM | +------+--------+---------+----------+ | 07 | 35 | 10 | AM | +------+--------+---------+----------+
STR_TO_DATE()-funktionen
STR_TO_DATE()
funktion är inversen av DATE_FORMAT()
fungera. Det låter dig tillhandahålla en sträng som ska formateras som ett datum. Den accepterar två parametrar; strängen och formatet.
Här är ett exempel:
SELECT STR_TO_DATE('Saturday, 6 December 2018', '%W, %d %M %Y') AS Date;
Resultat:
+------------+ | Date | +------------+ | 2018-12-06 | +------------+
Hur du hittar rätt datumformat
MySQL har en praktisk liten funktion som heter GET_FORMAT()
. Den här funktionen hjälper dig att hitta rätt format att använda när du använder DATE_FORMAT()
funktion och/eller STR_TO_DATE()
funktion .
Så här fungerar det:
SELECT GET_FORMAT(DATE, 'USA');
Detta resulterar i följande:
%m.%d.%Y
Vilket talar om för oss formatsträngen vi behöver använda när vi formaterar ett datum med DATE_FORMAT()
fungera. Till exempel kan vi ta resultaten från det exemplet och tillämpa dem på DATE_FORMAT()
funktion:
SELECT DATE_FORMAT(NOW(), '%m.%d.%Y');
Och vi skulle sluta med det önskade resultatet:
05.04.2018
Du kan också skicka GET_FORMAT()
direkt till DATE_FORMAT()
om du föredrar det.
SELECT DATE_FORMAT(NOW(), GET_FORMAT(DATE, 'USA'));
Resultat:
05.04.2018
Hur som helst, nedan är exempel med olika alternativ.
Datum
SELECT GET_FORMAT(DATE, 'USA') AS USA, GET_FORMAT(DATE, 'JIS') AS JIS, GET_FORMAT(DATE, 'ISO') AS ISO, GET_FORMAT(DATE, 'EUR') AS EUR, GET_FORMAT(DATE, 'INTERNAL') AS INTERNAL;
Resultat:
+----------+----------+----------+----------+----------+ | USA | JIS | ISO | EUR | INTERNAL | +----------+----------+----------+----------+----------+ | %m.%d.%Y | %Y-%m-%d | %Y-%m-%d | %d.%m.%Y | %Y%m%d | +----------+----------+----------+----------+----------+
Datumtid
SELECT GET_FORMAT(DATETIME, 'USA') AS USA, GET_FORMAT(DATETIME, 'JIS') AS JIS, GET_FORMAT(DATETIME, 'ISO') AS ISO, GET_FORMAT(DATETIME, 'EUR') AS EUR, GET_FORMAT(DATETIME, 'INTERNAL') AS INTERNAL;
Resultat:
+-------------------+-------------------+-------------------+-------------------+--------------+ | USA | JIS | ISO | EUR | INTERNAL | +-------------------+-------------------+-------------------+-------------------+--------------+ | %Y-%m-%d %H.%i.%s | %Y-%m-%d %H:%i:%s | %Y-%m-%d %H:%i:%s | %Y-%m-%d %H.%i.%s | %Y%m%d%H%i%s | +-------------------+-------------------+-------------------+-------------------+--------------+
Tid
SELECT GET_FORMAT(TIME, 'USA') AS USA, GET_FORMAT(TIME, 'JIS') AS JIS, GET_FORMAT(TIME, 'ISO') AS ISO, GET_FORMAT(TIME, 'EUR') AS EUR, GET_FORMAT(TIME, 'INTERNAL') AS INTERNAL;
Resultat:
+-------------+----------+----------+----------+----------+ | USA | JIS | ISO | EUR | INTERNAL | +-------------+----------+----------+----------+----------+ | %h:%i:%s %p | %H:%i:%s | %H:%i:%s | %H.%i.%s | %H%i%s | +-------------+----------+----------+----------+----------+