SQL查询以查找两个日期之间的所有星期日
要使用 SQL 语言查找两天之间的所有星期日,我们将使用 SQL 中定义的“日期函数”。除了这些,我们也将使用 CTE(视图)的想法。
基本思路:
所以基本上我们有两天的时间,我们需要列出这两天之间的所有星期日。
稍微思考一下,我们得到了一个想法,即我们可以检查为星期日给出的两个边界日期之间的所有日期。 SQL Date 函数也提供了一种这样的方法来实现这个想法:
DATENAME(interval_part, Date)
此函数返回参数中指定的日期部分的名称。
例如:
DATENAME(month, '18/11/2001' )
对该函数的调用将返回 11 月。
因此,我们可以将任何日期表示的日期名称与星期日进行匹配。如果是星期天,我们选择它,否则拒绝它。
现在剩下的部分是创建一个表格,其中包含两个给定日期之间的所有日期的列,以便我们可以对它们进行检查。
这可以使用这样的想法来完成,即我们可以将日期的日期部分在前一个日期的基础上增加 1 以获得下一个日期,并检查下一个日期是否小于给定的日期上限。
DATEADD(part , number, date) :此方法用于将指定的数字添加到date的给定部分。
例如。 DATEADD(year,2,'18/11/2001') 这导致日期:18/11/2003。
所以这是我们针对这个主题的 SQL 查询:
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*/