📌  相关文章
📜  SQL查询以查找两个日期之间的所有星期日

📅  最后修改于: 2022-05-13 01:54:38.219000             🧑  作者: Mango

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*/