En MariaDB, WEEK() es una función de fecha y hora incorporada que devuelve la semana de una expresión de fecha determinada.
Acepta dos argumentos; la fecha de la que desea extraer 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.
Sintaxis
La sintaxis es así:
WEEK(date[,mode])
Donde date es la expresión de fecha de donde se obtiene 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 WEEK() sin especificar un modo, utilizará el modo 0 .
Ejemplo
Aquí hay un ejemplo de llamar a WEEK() sin especificar el modo:
SELECT WEEK('2030-01-01'); Resultado:
+--------------------+
| WEEK('2030-01-01') |
+--------------------+
| 0 |
+--------------------+ Especifique un modo
Aquí hay un ejemplo de cómo especificar el modo:
SELECT WEEK('2030-01-01', 1); Resultado:
+-----------------------+
| WEEK('2030-01-01', 1) |
+-----------------------+
| 1 |
+-----------------------+
Esta vez, el resultado es 1 en lugar de 0 .
Repasemos todos los modos para la misma fecha:
SELECT
WEEK('2030-01-01', 0),
WEEK('2030-01-01', 1),
WEEK('2030-01-01', 2),
WEEK('2030-01-01', 3),
WEEK('2030-01-01', 4),
WEEK('2030-01-01', 5),
WEEK('2030-01-01', 6),
WEEK('2030-01-01', 7); Resultado (usando salida vertical):
WEEK('2030-01-01', 0): 0
WEEK('2030-01-01', 1): 1
WEEK('2030-01-01', 2): 52
WEEK('2030-01-01', 3): 1
WEEK('2030-01-01', 4): 1
WEEK('2030-01-01', 5): 0
WEEK('2030-01-01', 6): 1
WEEK('2030-01-01', 7): 53 Valores de fecha y hora
La WEEK() la función también funciona con valores de fecha y hora:
SELECT WEEK('2030-08-01 10:30:45'); Resultado:
+-----------------------------+
| WEEK('2030-08-01 10:30:45') |
+-----------------------------+
| 30 |
+-----------------------------+ Fechas numéricas
También es posible pasar fechas como un número, siempre que tenga sentido como fecha.
Ejemplo
SELECT WEEK(20301125); Resultado:
+----------------+ | WEEK(20301125) | +----------------+ | 47 | +----------------+
O incluso lo siguiente (que usa un año de dos dígitos):
SELECT WEEK(301125); Resultado:
+--------------+ | WEEK(301125) | +--------------+ | 47 | +--------------+
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 WEEK(20301135); Resultado:
+----------------+ | WEEK(20301135) | +----------------+ | NULL | +----------------+ 1 row in set, 1 warning (0.001 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
WEEK('2030/06/25'),
WEEK('2030,06,25'),
WEEK('2030:06:25'),
WEEK('2030;06!25'); Resultado (usando salida vertical):
WEEK('2030/06/25'): 25
WEEK('2030,06,25'): 25
WEEK('2030:06:25'): 25
WEEK('2030;06!25'): 25 Fecha actual
Podemos pasar NOW() como argumento de fecha y hora para usar la fecha actual:
SELECT
NOW(),
WEEK(NOW()); Resultado:
+---------------------+-------------+ | NOW() | WEEK(NOW()) | +---------------------+-------------+ | 2021-05-17 08:36:12 | 20 | +---------------------+-------------+
Argumentos no válidos
Cuando se pasa un argumento no válido, WEEK() devuelve null :
SELECT WEEK('2030-65-78'); Resultado:
+--------------------+
| WEEK('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 WEEK() con el número incorrecto de argumentos, o sin pasar ningún argumento, da como resultado un error:
SELECT WEEK(); Resultado:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
Y otro ejemplo:
SELECT WEEK('2030-12-10', 1, 2); Resultado:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' 2)' at line 1