每年的一周列表并从sql server中的星期一开始

时间:2016-06-01 08:23:05

标签: sql sql-server tsql

如何在财务年度中找到周年,因为SQL Server输入中的下面列表中的年份和周应该从星期一开始:

 - 01-Wk        Mar-28-Apr-03       28/03/2016   - 03/04/2016
 - 02-Wk        Apr-04-Apr-10       04/04/2016   - 10/04/2016
 - 03-Wk        Apr-11-Apr-17       11/04/2016   - 17/04/2016
 - 04-Wk        Apr-18-Apr-24       18/04/2016   - 24/04/2016
 - 05-Wk        Apr-25-May-01       25/04/2016   - 01/05/2016
 - 06-Wk        May-02-May-08       02/05/2016   - 08/05/2016
 - 07-Wk        May-09-May-15       09/05/2016   - 15/05/2016

1 个答案:

答案 0 :(得分:1)

这样做的最佳和最可靠的方法是创建一个日历表。这是一个表格,其中包含您可以通过任何查询链接到的日期所需的所有信息。这样做的好处是,您可以根据需要设置自己的周数,也可以为每行数据创建一个周开始日期列。

一个非常基本的版本会是这样的;

Date         WeekNum   WeekStart   WeekEnd     Year
2016-06-01   24        2016-05-30  2016-06-05  2016
2016-06-02   24        2016-05-30  2016-06-05  2016
2016-06-03   24        2016-05-30  2016-06-05  2016 
2016-06-04   24        2016-05-30  2016-06-05  2016
2016-06-05   24        2016-05-30  2016-06-05  2016
2016-06-06   25        2016-06-06  2016-06-05  2016
2016-06-07   25        2016-06-06  2016-06-05  2016

这比性能每次计算更好。

编辑回答以包含您的评论。要检索您的数据,您需要这样的假设您将要通过年和周

DECLARE @YearParam int; SET @YearParam = 2016
DECLARE @WeekParam int; SET @WeekParam = 24

SELECT DISTINCT
Year
,WeekNum
,WeekStart + ' - ' + WeekEnd
FROM DateTable
WHERE Year = @YearParam
AND WeekNum = @WeekParam

下面围绕这个主题进行了进一步的阅读;

https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/

http://michaelmorley.name/how-to/create-date-dimension-table-in-sql-server

https://dba.stackexchange.com/questions/74957/best-approach-for-populating-date-dimension-table