En MariaDB, YEARWEEK()
es una función de fecha y hora incorporada que devuelve el año y la semana para una fecha determinada.
Acepta dos argumentos; la fecha de la que desea extraer el año y la semana, y un argumento de modo opcional para especificar el modo que se usará en el resultado.
Devuelve la semana como un número en el rango 0
a 53
o 1
a 53
, según el modo que se utilice. Además, el año en el resultado puede ser diferente del año en el argumento de fecha para la primera y la última semana del año.
Sintaxis
La sintaxis es así:
YEARWEEK(date), YEARWEEK(date,mode)
Que también podría expresarse así:
YEARWEEK(date[,mode])
Donde date
es la expresión de fecha para obtener el año y la semana, y mode
es un argumento opcional que le permite especificar un modo para usar.
Modos
El mode
opcional El argumento determina si la semana comienza el domingo o el lunes, y si el valor de retorno debe estar en el rango de 0
a 53
o desde 1
a 53
.
El argumento de modo puede ser cualquiera de los siguientes:
Modo | 1er día de la semana | Rango | La semana 1 es la primera semana con... |
---|---|---|---|
0 | domingo | 0-53 | un domingo de este año |
1 | lunes | 0-53 | más de 3 días este año |
2 | domingo | 1-53 | un domingo de este año |
3 | lunes | 1-53 | más de 3 días este año (según ISO 8601:1988) |
4 | domingo | 0-53 | más de 3 días este año |
5 | lunes | 0-53 | un lunes de este año |
6 | domingo | 1-53 | más de 3 días este año |
7 | lunes | 1-53 | un lunes de este año |
Si se omite el argumento de modo, el valor de default_week_format
se utiliza la variable del sistema.
Comprobemos el valor de mi default_week_format
variable del sistema:
SELECT @@default_week_format;
Resultado:
+-----------------------+ | @@default_week_format | +-----------------------+ | 0 | +-----------------------+
Ahora, cuando ejecuto YEARWEEK()
sin especificar un modo, utilizará el modo 0
.
Ejemplo
Aquí hay un ejemplo de llamar a YEARWEEK()
sin especificar el modo:
SELECT YEARWEEK('2030-01-01');
Resultado:
+------------------------+ | YEARWEEK('2030-01-01') | +------------------------+ | 202952 | +------------------------+
En este caso, el año y la semana resultantes son del año anterior.
Especifique un modo
Aquí hay un ejemplo de cómo especificar el modo:
SELECT YEARWEEK('2030-01-01', 1);
Resultado:
+---------------------------+ | YEARWEEK('2030-01-01', 1) | +---------------------------+ | 203001 | +---------------------------+
Esta vez, el resultado es diferente.
Repasemos todos los modos para la misma fecha:
SELECT
YEARWEEK('2030-01-01', 0),
YEARWEEK('2030-01-01', 1),
YEARWEEK('2030-01-01', 2),
YEARWEEK('2030-01-01', 3),
YEARWEEK('2030-01-01', 4),
YEARWEEK('2030-01-01', 5),
YEARWEEK('2030-01-01', 6),
YEARWEEK('2030-01-01', 7);
Resultado (usando salida vertical):
YEARWEEK('2030-01-01', 0): 202952 YEARWEEK('2030-01-01', 1): 203001 YEARWEEK('2030-01-01', 2): 202952 YEARWEEK('2030-01-01', 3): 203001 YEARWEEK('2030-01-01', 4): 203001 YEARWEEK('2030-01-01', 5): 202953 YEARWEEK('2030-01-01', 6): 203001 YEARWEEK('2030-01-01', 7): 202953
Valores de fecha y hora
El YEARWEEK()
la función también funciona con valores de fecha y hora:
SELECT YEARWEEK('2030-08-01 10:30:45');
Resultado:
+---------------------------------+ | YEARWEEK('2030-08-01 10:30:45') | +---------------------------------+ | 203030 | +---------------------------------+
Fechas numéricas
También es posible pasar fechas como un número, siempre que tenga sentido como fecha.
Ejemplo
SELECT YEARWEEK(20301125);
Resultado:
+--------------------+ | YEARWEEK(20301125) | +--------------------+ | 203047 | +--------------------+
O incluso lo siguiente (que usa un año de dos dígitos):
SELECT YEARWEEK(301125);
Resultado:
+------------------+ | YEARWEEK(301125) | +------------------+ | 203047 | +------------------+
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 YEARWEEK(20301135);
Resultado:
+--------------------+ | YEARWEEK(20301135) | +--------------------+ | NULL | +--------------------+ 1 row in set, 1 warning (0.000 sec)
Devolvió null
con una advertencia
Veamos la advertencia:
SHOW WARNINGS;
Resultado:
+---------+------+--------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------+ | Warning | 1292 | Incorrect datetime value: '20301135' | +---------+------+--------------------------------------+
Otros delimitadores
Puede utilizar otros delimitadores para la fecha. MariaDB es bastante indulgente cuando se trata de delimitadores en fechas. Aquí hay algunos ejemplos válidos:
SELECT
YEARWEEK('2030/06/25'),
YEARWEEK('2030,06,25'),
YEARWEEK('2030:06:25'),
YEARWEEK('2030;06!25');
Resultado (usando salida vertical):
YEARWEEK('2030/06/25'): 203025 YEARWEEK('2030,06,25'): 203025 YEARWEEK('2030:06:25'): 203025 YEARWEEK('2030;06!25'): 203025
Fecha actual
Podemos pasar NOW()
como argumento de fecha y hora para usar la fecha actual:
SELECT
NOW(),
YEARWEEK(NOW());
Resultado:
+---------------------+-----------------+ | NOW() | YEARWEEK(NOW()) | +---------------------+-----------------+ | 2021-05-17 09:08:23 | 202120 | +---------------------+-----------------+
Argumentos no válidos
Cuando se pasa un argumento no válido, YEARWEEK()
devuelve null
:
SELECT YEARWEEK('2030-65-78');
Resultado:
+------------------------+ | YEARWEEK('2030-65-78') | +------------------------+ | NULL | +------------------------+ 1 row in set, 1 warning (0.000 sec)
Mostremos la advertencia:
SHOW WARNINGS;
Resultado:
+---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1292 | Incorrect datetime value: '2030-65-78' | +---------+------+----------------------------------------+
Argumento faltante
Llamando a YEARWEEK()
con el número incorrecto de argumentos, o sin pasar ningún argumento, da como resultado un error:
SELECT YEARWEEK();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'YEARWEEK'
Y otro ejemplo:
SELECT YEARWEEK('2030-12-10', 1, 2);
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'YEARWEEK'