sql - 如何在 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
解决方案
如果您想要该月第一个星期一之前的所有天,那么您可以使用递归 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。
推荐阅读
- c# - Datagridview 显示不带行的数据表列标题
- javascript - 在 CSS 中设置为 100% 的 Div 宽度破坏了我的脚本的宽度
- java - Java android studio 项目中的 NoFileFoundException
- python - 是什么导致我的输入没有保存到我的 django 模型数据库中?
- mysql - Spring DAO rewritebatchedstatements 不适用于具有 embeddedId 的实体上的 SaveAll()
- wordpress - 尝试通过 React Web App 创建无头 Wordpress 登录
- javascript - IndexedDB IDBObjectStore.add 错误:“生成的键无法插入到值中”
- r - 如何在特定行的列之间切换值?
- akka.net - 如果参与者进程重新启动 - Akka.NET,如何确保邮箱消息不会丢失?
- javascript - 为较小的屏幕反应渲染 html