如何让我的日期与每周的开始/结束正确对齐?

Posted

技术标签:

【中文标题】如何让我的日期与每周的开始/结束正确对齐?【英文标题】:How do I get my dates to properly align to the start/end of each week? 【发布时间】:2021-03-03 23:59:51 【问题描述】:

我正在尝试运行一个简单的查询来获取一个日期并确定该日期所在的一周的开始和结束(即,对于 2021 年 3 月 3 日,WEEKSTART 值将是 3/1/2021,而WEEKEND 值为 2021 年 3 月 7 日)。

SET DATEFIRST 1;

SELECT
 CAST(DD.Date as Date) AS DATE_
 ,CONVERT(Date, dateadd(wk, datediff(wk, 0, CAST(DD.Date as Date)), 0)) AS WEEK_START
 ,CONVERT(Date, dateadd(wk, datediff(wk, 0, CAST(DD.Date as Date)), 0)+6) AS WEEK_END
FROM DimDate DD
WHERE DateSkey BETWEEN '20210101' AND '20210301'

当我通过查询传递一个日期时,除了星期天之外,一切都正确排列。输出示例见下文:

Date WEEK_START WEEK_END
2021-02-22 2021-02-22 2021-02-28
2021-02-23 2021-02-22 2021-02-28
2021-02-24 2021-02-22 2021-02-28
2021-02-25 2021-02-22 2021-02-28
2021-02-26 2021-02-22 2021-02-28
2021-02-27 2021-02-22 2021-02-28
2021-02-28 2021-03-01 2021-03-07

上述示例的问题在于,星期日值 (2021-02-28) 的 WEEK_START 必须为 2021-02-22,WEEK_END 必须为 2021-02-28。我认为 SET DATEFIRST 1 行可以解决问题,但事实并非如此。有什么想法吗?

【问题讨论】:

【参考方案1】:

它对你有用吗?

SET DATEFIRST 1;

DECLARE
    @d date='2021-02-28'

select @d [Date]
,DATEADD(dd, -DATEPART(dw, @d)+1, @d) WEEK_START
,DATEADD(dd, 7-DATEPART(dw, @d), @d) WEEK_END

输出:

Date        WEEK_START  WEEK_END
2021-02-28  2021-02-22  2021-02-28

【讨论】:

@Bohemian 是的,有任何疑问吗?

以上是关于如何让我的日期与每周的开始/结束正确对齐?的主要内容,如果未能解决你的问题,请参考以下文章

如何在angularjs中获取每周明智的开始和结束日期

如何在 iOS 中按周/月/每 X 天添加开始日期和结束日期的余数?

PHP获取一年有几周以及每周开始日期和结束日期

php获取本周开始日期和结束日期的方法

PHP获取一年有几周以及每周开始日期和结束日期

如何使用事件来计算 eas 中重复事件的结束日期