【发布时间】:2015-10-14 14:24:28
【问题描述】:
我对如何按月划分周有疑问。实际上我的一周从星期一开始,而在 sql server 中的一周从星期日开始,这就产生了问题。我必须编写代码,因此如果用户给出的开始日期和结束日期的日期差大于 30 且小于 90,则日期应该以天和周为单位进行拆分。这样做是这样的- 首先,我必须找到开始日期是什么,如果开始日期是星期一,那么除了首先我必须找到我发现的上一个星期一是什么时候-
declare @enddate date = '2015-08-01';
select convert (date, DATEADD(wk, DATEDIFF(wk, 0,@enddate),0))
但是如果开始日期是星期天,这将不起作用为此我添加了一个变量来检查开始日是星期天,如果是星期天,然后我将其设置为 1,然后我将代码更改为 - (仅适用于星期天)
declare @enddate date = '2015-08-02';
select convert (date, DATEADD(wk, DATEDIFF(wk, 6,@enddate),0))
对我来说主要问题是如何在几周内分手。我按给定的代码划分了几周。 这是示例日期
declare @enddate date = '2015-11-03';
SELECT 'Week ' + CAST(DATEPART(WEEK,@ENDDATE)
- DATEPART(WEEK,DATENAME(YEAR,@ENDDATE) + '/'
+ DATENAME(MONTH,@ENDDATE) + '/' + '1') AS NVARCHAR)+ ' ' + DATENAME(MONTH,@ENDDATE)
输出是-
Week 0 November
11 月 1 日至 7 日之间的所有日期都显示第 0 周
谁能帮助我为什么显示第 0 周而不是第 2 周,因为我的一周从星期一开始,2015 年 11 月从星期日开始,所以只有一天应该是第 1 周,而从 11 月 2 日到 11 月 8 日应该是第 2 周 欢迎任何帮助,如果您不理解某些内容,请发表评论
已编辑 - 需要一个逻辑,以便我能够将一周从周一拆分到周日,但我无法做到 -
如果月份在几周之间发生变化,例如一个月的 30 号是星期二,那么本周应该只在此处结束,下个月 1 将在星期三现在该月的新一周从星期三开始到星期日,这将是第一周月。
在我的案例逻辑中,我得到了它,但特别是 2015 年 11 月,我无法得到它。
需要输出-
Start date -2015-09-07 End date-2015-11-01
Output
Start date End date
Week 2 September Week 1 November
Start date -2015-09-07 End date-2015-11-05
Output -
Start date End date
Week 2 September Week 1 November
2015-11-02 2015-11-05
Start date -2015-09-07 End date-2015-11-08
Output -
Start date End date
Week 2 September Week 2 November
Start date -2015-09-08 End date-2015-11-05
Start date End date
2015-09-08 2015-09-13
Week 3 September Week 1 November
2015-11-02 2015-11-05
【问题讨论】:
-
正如发布的那样,这没有多大意义。有很多文字,但并没有清楚地描绘出您要做什么。
-
我不明白它什么时候开始/我看不到开始日期。您能否添加带有开始和结束日期及其各自输出的清晰示例。您当前的示例现在没有多大意义。
-
你能再查一下吗
-
您希望您的计算基于 mobday 是一周的第一天这一事实?
-
@JulienVavasseur 11 月 3 日它应该显示您运行的日期的第 2 周,它也显示第 1 周,因为我在 n varchar 之前添加了 1,因此我的整个代码都改变了......所以我也不想要
标签: sql-server sql-server-2008