Consulta SQL para encontrar todos los domingos entre dos fechas

Para encontrar todos los domingos entre dos días usando el lenguaje SQL, usaremos las «Funciones de fecha» definidas en SQL. Aparte de estos, también usaremos la idea CTE (Ver).

Idea básica: 

Básicamente, se nos dan dos días y se nos exige que enumeremos todos los domingos entre estos dos días. 

Pensando un poco, se nos ocurrió la idea de que podemos verificar todas las fechas entre las dos fechas límite dadas para los domingos. Además, las funciones SQL Date proporcionan uno de esos métodos para implementar esta idea:

DATENAME(interval_part, Date)

Esta función devuelve el nombre de la parte de la fecha especificada en los argumentos.

Por ejemplo: 

DATENAME(month, '18/11/2001' ) 

Esta llamada a la función devolvería noviembre.

Por lo tanto, podemos hacer coincidir el nombre del día representado por cualquier fecha con el domingo. Si es domingo entonces lo seleccionamos, de lo contrario lo rechazamos.

Ahora la parte restante es crear una tabla que contenga una columna de todas las fechas entre las dos fechas dadas, para que podamos realizar nuestra verificación sobre ellas.

Esto se puede hacer usando la idea de que podemos incrementar la parte del día de la fecha en 1 sobre la fecha anterior para obtener la próxima fecha y verificar que la próxima fecha sea menor que el límite superior dado de las fechas.

DATEADD (parte, número, fecha): este método se utiliza para agregar el número especificado a la parte  dada de la fecha.

Por ej. DATEADD(año,2,’18/11/2001′) Esto da como resultado la fecha: 18/11/2003.

Así que aquí está nuestra consulta SQL para este tema:

declare  @StartDate DateTime = '2021-02-01',
              @EndDate DateTime = '2021-02-28';
/*Creating a temporary view in sql(CTE) which recursively 
calls itself to find next date by incrementing the 
previous date and stores the result in it till the end date is reached*/
WITH CTE(date_list) AS (
      SELECT @StartDate
      UNION ALL
      SELECT DATEADD(day,1,date_list) FROM CTE
      WHERE date_list<=@EndDate
)
SELECT date_list as 'List of sundays'
FROM CTE
WHERE DATENAME(weekday ,date_list) IN ('Sunday');
/*In the where clause at last we are checking 
each day from the list whether it is in Sunday list or not*/

Publicación traducida automáticamente

Artículo escrito por harshkumarchoudhary144 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *