sql >> Base de Datos >  >> RDS >> Mysql

Cómo formatear la fecha y la hora en MySQL

En MySQL, el DATE_FORMAT() La función le permite formatear la fecha y la hora.

He aquí un ejemplo:

SELECT DATE_FORMAT('2018-12-01', '%W, %d %M %Y');

Resultado:

Saturday, 01 December 2018

En este ejemplo, %W es para el nombre del día de la semana, %d es para el día del mes, %M es por Mes, y %Y es por Año. Hay muchos más especificadores de formato disponibles que le permiten especificar un formato preciso para las fechas, así como el componente de hora.

Dando formato al componente de tiempo

Aquí hay un ejemplo de formateo del componente de tiempo:

SELECT DATE_FORMAT('2018-12-01 11:03:15', '%H:%i:%s %p');

Resultado:

11:03:15 AM

En este ejemplo, %p se utiliza para mostrar AM o PM, según sea el caso.

Por supuesto, puede combinarlos para formatear tanto la fecha como la hora de una sola vez:

SELECT DATE_FORMAT('2018-12-01 11:03:15', '%H:%i:%s %p, %W, %d %M %Y');

Resultado:

11:03:15 AM, Saturday, 01 December 2018

Formato con una función de fecha/hora

A menudo querrás usar DATE_FORMAT() junto con otra función de fecha/hora. Por ejemplo, podría usarlo junto con CURDATE() para devolver la fecha actual, con un formato agradable:

SELECT 
 CURDATE() AS Unformatted, 
 DATE_FORMAT(CURDATE(), '%W, %M %d, %Y') AS Formatted;

Resultado:

+-------------+----------------------+
| Unformatted | Formatted            |
+-------------+----------------------+
| 2018-05-04  | Friday, May 04, 2018 |
+-------------+----------------------+

También puede hacer esto con NOW() función si necesita el tiempo:

SELECT
 NOW() AS Unformatted,
 DATE_FORMAT(NOW(), '%r') AS Formatted;

Resultados:

+---------------------+-------------+
| Unformatted         | Formatted   |
+---------------------+-------------+
| 2018-05-04 14:33:52 | 02:33:52 PM |
+---------------------+-------------+

Función TIME_FORMAT()

MySQL también tiene un TIME_FORMAT() función que se puede utilizar para formatear la hora. Esta función funciona de manera similar a DATE_FORMAT() excepto que TIME_FORMAT() solo acepta especificadores de formato solo para horas, minutos, segundos y microsegundos.

Ejemplo:

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';

Resultados:

+------+--------+---------+----------+
| Hour | Minute | Seconds | AM or PM |
+------+--------+---------+----------+
| 07   | 35     | 10      | AM       |
+------+--------+---------+----------+

La función STR_TO_DATE()

El STR_TO_DATE() la función es la inversa de DATE_FORMAT() función. Le permite proporcionar una cadena para que se formatee como una fecha. Acepta dos parámetros; la cadena y el formato.

He aquí un ejemplo:

SELECT STR_TO_DATE('Saturday, 6 December 2018', '%W, %d %M %Y') AS Date;

Resultado:

+------------+
| Date       |
+------------+
| 2018-12-06 |
+------------+

Cómo encontrar el formato de fecha correcto

MySQL tiene una pequeña función útil llamada GET_FORMAT() . Esta función lo ayuda a encontrar el formato correcto para usar cuando usa DATE_FORMAT() función y/o STR_TO_DATE() función .

Así es como funciona:

SELECT GET_FORMAT(DATE, 'USA');

Esto da como resultado lo siguiente:

%m.%d.%Y

Lo que nos dice la cadena de formato que necesitaríamos usar al formatear una fecha con DATE_FORMAT() función. Por ejemplo, podríamos tomar los resultados de ese ejemplo y aplicarlos al DATE_FORMAT() función:

SELECT DATE_FORMAT(NOW(), '%m.%d.%Y');

Y terminaríamos con el resultado deseado:

05.04.2018

También puede pasar GET_FORMAT() directamente a DATE_FORMAT() si lo prefieres.

SELECT DATE_FORMAT(NOW(), GET_FORMAT(DATE, 'USA'));

Resultado:

05.04.2018

En cualquier caso, a continuación se muestran ejemplos con varias opciones.

Fecha

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;

Resultado:

+----------+----------+----------+----------+----------+
| USA      | JIS      | ISO      | EUR      | INTERNAL |
+----------+----------+----------+----------+----------+
| %m.%d.%Y | %Y-%m-%d | %Y-%m-%d | %d.%m.%Y | %Y%m%d   |
+----------+----------+----------+----------+----------+

Fecha y hora

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;

Resultado:

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

Tiempo

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; 

Resultado:

+-------------+----------+----------+----------+----------+
| USA         | JIS      | ISO      | EUR      | INTERNAL |
+-------------+----------+----------+----------+----------+
| %h:%i:%s %p | %H:%i:%s | %H:%i:%s | %H.%i.%s | %H%i%s   |
+-------------+----------+----------+----------+----------+