sql >> Databasteknik >  >> RDS >> Mysql

Hur man formaterar datum och tid i MySQL

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   |
+-------------+----------+----------+----------+----------+


  1. Hur kan jag importera data från ASCII (ISO/IEC 8859-1) till min Rails/PGSQL-databas?

  2. Dynamisk SQL vs lagrad procedur

  3. Finns det något sätt att installera java på Oracle 11g XE?

  4. Öka ett databasfält med 1