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

AÑO() Ejemplos – MySQL

En MySQL, YEAR() es una función de fecha y hora incorporada que devuelve el año de una expresión de fecha determinada.

Devuelve el año como un número en el rango 1000 a 9999 . Para fechas cero, podría devolver 0 o NULL con una advertencia, dependiendo de los valores en su sql_mode .

Sintaxis

La sintaxis es así:

YEAR(date)

Donde date es la expresión de fecha de donde se obtiene el año.

Ejemplo

He aquí un ejemplo:

SELECT YEAR('2045-12-10');

Resultado:

2045

Valores de fecha y hora

También funciona con valores de fecha y hora:

SELECT YEAR('2045-12-10 18:52:17');

Resultado:

2045

Cero fechas

Según la documentación de MySQL, las fechas cero dan como resultado 0 . Sin embargo, el resultado real dependerá del valor de su sql_mode variable del sistema.

De forma predeterminada, no se permiten fechas cero y, por lo tanto, hacer lo siguiente produce NULL con una advertencia:

SELECT YEAR('0000-00-00');

Resultado:

+--------------------+
| YEAR('0000-00-00') |
+--------------------+
|               NULL |
+--------------------+
1 row in set, 1 warning (0.00 sec)

Y aquí está la advertencia:

show warnings;

Resultado:

+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '0000-00-00' |
+---------+------+----------------------------------------+

Recibí esta advertencia porque mi sql_mode la variable del sistema incluye NO_ZERO_DATE y NO_ZERO_IN_DATE :

SELECT @@SESSION.sql_mode;

Resultado:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Restablezcamos mi sql_mode sin esos valores:

SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SELECT @@SESSION.sql_mode;

Resultado:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

Ahora ejecutemos el YEAR() volver a funcionar con la fecha cero:

SELECT YEAR('0000-00-00');

Resultado:

0

Esta vez obtenemos 0 , según la documentación.

Tenga en cuenta que NO_ZERO_DATE y NO_ZERO_IN_DATE están en desuso en el momento de escribir este artículo. Por lo tanto, podrían eliminarse en cualquier momento.

Fechas numéricas

También es posible pasar fechas como un número, siempre que tenga sentido como fecha.

Ejemplo:

SELECT YEAR(20451210);

Resultado:

2045

O incluso lo siguiente (que usa un año de dos dígitos):

SELECT YEAR(451210);

Resultado:

2045

Pero debe tener sentido como fecha. Esto es lo que sucede si aumento la parte del día a un día no válido:

SELECT YEAR(20451265);

Resultado:

+----------------+
| YEAR(20451265) |
+----------------+
|           NULL |
+----------------+
1 row in set, 1 warning (0.00 sec)

Podemos comprobar la advertencia de esta manera:

show warnings;

Resultado:

+---------+------+--------------------------------------+
| Level   | Code | Message                              |
+---------+------+--------------------------------------+
| Warning | 1292 | Incorrect datetime value: '20451265' |
+---------+------+--------------------------------------+

Otros delimitadores

Puede utilizar otros delimitadores para la fecha. MySQL es bastante indulgente cuando se trata de delimitadores de fechas. Aquí hay algunos ejemplos válidos:

SELECT 
    YEAR('2045/12/10'),
    YEAR('2045,12,10'),
    YEAR('2045:12:10'),
    YEAR('2045;12!10');

Resultado (usando salida vertical):

YEAR('2045/12/10'): 2045
YEAR('2045,12,10'): 2045
YEAR('2045:12:10'): 2045
YEAR('2045;12!10'): 2045

Fecha actual

Podemos pasar NOW() como argumento de fecha y hora para usar la fecha actual:

SELECT 
    NOW(),
    YEAR(NOW());

Resultado:

+---------------------+-------------+
| NOW()               | YEAR(NOW()) |
+---------------------+-------------+
| 2021-10-17 11:09:23 |        2021 |
+---------------------+-------------+

Argumentos no válidos

Cuando se pasa un argumento no válido, YEAR() devuelve null :

SELECT YEAR('2030-65-78');

Resultado:

+--------------------+
| YEAR('2030-65-78') |
+--------------------+
|               NULL |
+--------------------+
1 row in set, 1 warning (0.00 sec)

Compruebe la advertencia:

SHOW WARNINGS;

Resultado:

+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Incorrect datetime value: '2030-65-78' |
+---------+------+----------------------------------------+

Argumento faltante

Llamando a YEAR() con el número incorrecto de argumentos, o sin pasar ningún argumento, da como resultado un error:

SELECT YEAR();

Resultado:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

Y otro ejemplo:

SELECT YEAR('2030-12-10', '2031-12-10');

Resultado:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ', '2031-12-10')' at line 1