首页 > 解决方案 > 如何在 SQL Server 中查找当月(提供日期)的所有第一周天(截至第一个星期日的天数)?

问题描述

当该月的任何日期提供给您时,我想查找所有第一周(直到第一个星期日)的日期。

示例 1

给定日期:

2020-04-29

选择查询的预期结果:

The first week of April 2020
-----------------------------------------------------
2020-04-01
2020-04-02
2020-04-03
2020-04-04
2020-04-05

示例 2

给定日期:

2020-03-29

选择查询的预期结果:

The first week of March 2020
-----------------------------------------------------
2020-03-01

标签: sqlsql-servertsql

解决方案


如果您想要该月第一个星期一之前的所有天,那么您可以使用递归 CTE:

with dates as (
     select dateadd(day, 1, eomonth('2020-04-29', -1)) as dte
     union all
     select dateadd(day, 1, dte)
     from dates 
     where datename(weekday, dte) <> 'Sunday'
)
select *, datename(weekday, dte)
from dates;

这假设您希望一周从星期一开始有 7 天(尽管很容易对其进行调整以不返回任何行。

是一个 db<>fiddle。


推荐阅读