sql >> Base de Datos >  >> RDS >> MariaDB

5 funciones para extraer el número de semana de una fecha en MariaDB

A continuación hay 5 funciones que le permiten devolver el número de semana de una fecha en MariaDB. Cuatro devuelven solo la semana y uno devuelve la semana y el año combinados.

La WEEK() Función

La WEEK() función devuelve la semana para una fecha determinada.

Ejemplo:

SELECT WEEK('2023-07-25');

Resultado:

+--------------------+
| WEEK('2023-07-25') |
+--------------------+
|                 30 |
+--------------------+

La WEEK() La función acepta un segundo argumento opcional para especificar el modo. El resultado real que obtenga de esta función dependerá del modo que se utilice. Si se omite el argumento de modo, el valor de default_week_format se utiliza la variable del sistema.

Ver cómo WEEK() Funciona en MariaDB para obtener más información sobre los modos y ejemplos de cada uno.

El EXTRACT() Función

El EXTRACT () La función le permite extraer una unidad específica de la fecha. Por lo tanto, puede usarlo para extraer la semana (así como otras unidades) de la fecha.

Ejemplo:

SELECT EXTRACT(WEEK FROM '2023-07-25');

Resultado:

+---------------------------------+
| EXTRACT(WEEK FROM '2023-07-25') |
+---------------------------------+
|                              30 |
+---------------------------------+

El DATE_FORMAT() Función

El DATE_FORMAT() La función le permite formatear una fecha en función de una cadena de formato. La cadena de formato especifica cómo debe formatearse la fecha.

Por lo tanto, puede utilizar esta función para devolver la semana (así como cualquier otra unidad) a partir de la fecha. Hay varias opciones para devolver el número de semana, según el día en que comience la semana, etc.

Aquí hay un ejemplo que devuelve la semana en varias formas:

SELECT 
    DATE_FORMAT('2023-01-01', '%U') AS "%U",
    DATE_FORMAT('2023-01-01', '%u') AS "%u",
    DATE_FORMAT('2023-01-01', '%V') AS "%V",
    DATE_FORMAT('2023-01-01', '%v') AS "%v";

Resultado:

+------+------+------+------+
| %U   | %u   | %V   | %v   |
+------+------+------+------+
| 01   | 00   | 01   | 52   |
+------+------+------+------+

Aquí hay una descripción de cada uno de esos especificadores de formato:

Especificador de formato Descripción
%U Número de semana (00-53), cuando el primer día de la semana es domingo.
%u Número de semana (00-53), cuando el primer día de la semana es lunes.
%V Número de semana (01-53), cuando el primer día de la semana es domingo. Usado con %X .
%v Número de semana (01-53), cuando el primer día de la semana es lunes. Usado con %x .

Y aquí hay una descripción de %X y %x como se menciona en la tabla anterior:

Especificador de formato Descripción
%X Año con 4 dígitos cuando el primer día de la semana es domingo. Usado con %V .
%x Año con 4 dígitos cuando el primer día de la semana es lunes. Usado con %v .

Podemos combinar especificadores de formato para devolver el año y la semana juntos si es necesario:

SELECT 
    DATE_FORMAT('2023-01-01', '%X, %V') AS "%X, %V",
    DATE_FORMAT('2023-01-01', '%x, %v') AS "%x, %v";

Resultado:

+----------+----------+
| %X, %V   | %x, %v   |
+----------+----------+
| 2023, 01 | 2022, 52 |
+----------+----------+

Tenga en cuenta que el número de la semana no siempre reflejará los ejemplos anteriores; depende de la fecha real que se utilice.

Avancemos la fecha un año:

SELECT 
    DATE_FORMAT('2024-01-01', '%U') AS "%U",
    DATE_FORMAT('2024-01-01', '%u') AS "%u",
    DATE_FORMAT('2024-01-01', '%V') AS "%V",
    DATE_FORMAT('2024-01-01', '%v') AS "%v";

Resultado:

+------+------+------+------+
| %U   | %u   | %V   | %v   |
+------+------+------+------+
| 00   | 01   | 53   | 01   |
+------+------+------+------+

Esta vez obtenemos un conjunto diferente de resultados.

Esto es lo que sucede cuando avanzamos en el año:

SELECT 
    DATE_FORMAT('2024-12-12', '%U') AS "%U",
    DATE_FORMAT('2024-12-12', '%u') AS "%u",
    DATE_FORMAT('2024-12-12', '%V') AS "%V",
    DATE_FORMAT('2024-12-12', '%v') AS "%v";

Resultado:

+------+------+------+------+
| %U   | %u   | %V   | %v   |
+------+------+------+------+
| 49   | 50   | 49   | 50   |
+------+------+------+------+

Como puede ver, devolver el número de la semana no siempre es tan claro como desearíamos.

Consulte Cadenas de formato de MariaDB para obtener una lista completa de cadenas/especificadores de formato que se pueden usar con DATE_FORMAT() .

El YEARWEEK() Función

Es posible obtener la semana y año de una vez. El YEARWEEK() función devuelve el año y la semana para una fecha determinada.

Ejemplo:

SELECT YEARWEEK('2023-01-01');

Resultado:

+------------------------+
| YEARWEEK('2023-01-01') |
+------------------------+
|                 202301 |
+------------------------+

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.

Esto es lo que sucede si avanzamos un año:

SELECT YEARWEEK('2024-01-01');

Resultado:

+------------------------+
| YEARWEEK('2024-01-01') |
+------------------------+
|                 202353 |
+------------------------+

Al igual que con WEEK() función, el YEARWEEK() La función acepta un segundo argumento opcional para especificar el modo. El resultado real que obtenga de esta función dependerá del modo que se utilice. Si se omite el argumento de modo, el valor de default_week_format se utiliza la variable del sistema.

Vea cómo YEARWEEK() Funciona en MariaDB para obtener más información sobre los modos y ejemplos de cada uno.