2017-09-12 3 views
0

Ich finde schon, um die Wochennummer zu bekommen, aber das zeigt das Datum anders an.Wie bekomme ich das Startdatum und das Enddatum von Wochen mit der Wochennummer in meinem Fall mit SQL Server?

Eigentlich Wenn ich überprüfen die Wochennummer für das Datum der

select datepart(wk,'2016-01-02') //Saturday 

output: 1 

select datepart(wk,'2016-01-03') //Sunday 

output: 2 

Aber wenn ich das Datum des Beginns und Enddatum Wochen mit Wochennummer erhalten, zeigt es anders.

DECLARE @weekStart INT 
DECLARE @weekEnd INT 
DECLARE @Year INT 

set @weekStart = 1 
set @Year = 2016 

DECLARE @WeekStartDate date 
DECLARE @WeekEndDate date 

SET @WeekStartDate = convert(date,DATEADD (WEEK, @weekStart, DATEADD (YEAR, @Year-1900, 0)) - 4 - 
               DATEPART(DW, DATEADD (WEEK, @weekStart, DATEADD (YEAR, @Year-1900, 0)) - 4) + 1) 
SET @WeekEndDate =convert(date,DATEADD (WEEK, @weekStart+1, DATEADD (YEAR, @Year-1900, 0)) - 4 - 
               DATEPART(DW, DATEADD (WEEK, @weekStart+1, DATEADD (YEAR, @Year-1900, 0)) - 4) + 1) 

select @WeekStartDate,@WeekEndDate 


output: 
    StartingDate EndingDate 
    -------------------------- 
    2016-01-03  2016-01-09 

I-Ausgang erwarte ist, wenn ich Woche geben = 1 sollte es geben STARTING = ** 2016-01-01 und ** EndingDate =2016-01-02

für die Woche Nummer 2, sollte es geben 2016-01-03 2016-01-09

+0

Ich hatte gerade einen Dimensionen Tisch machen .... https: // www. mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/ – scsimon

Antwort

1

Sie können den absoluten Anfang/Ende der Woche und dann für das laufende Jahr in der ersten Woche Start und die letzte Woche Ende einstellen. Sie müssen nur wirklich den Start berechnen, da das Ende + 6 Tage beginnen:

create procedure spWeekDates @year int, @week int 
as 
declare @firstWeekDay int 
declare @yearStart datetime, @weekStartDate datetime, @weekEndDate datetime 

set datefirst 7 -- change as needed 
set @yearStart=cast(@year as char(4))+'0101' -- years always start on 01/01 [citation needed] 
set @firstWeekDay=datepart(weekday,@yearStart) 

-- absolute start/end dates 
set @weekStartDate=dateadd(week,@week-1,@yearStart)[email protected]+1 
set @weekEndDate=dateadd(day,6,@weekStartDate) 
-- adjusting for target year 
if year(@weekStartDate)<@year set @[email protected] 
if year(@weekEndDate)>@year set @weekEndDate=cast(@year as char(4))+'1231' 

select @weekStartDate as WeekStartDate, @weekEndDate as WeekEndDate 
go 

exec spWeekDates 2016,1 
exec spWeekDates 2016,2 
exec spWeekDates 2016,53 
go 

Ergebnisse:

|  WeekStartDate |   WeekEndDate | 
|---------------------|---------------------| 
| 2016-01-01 00:00:00 | 2016-01-02 00:00:00 | 

|  WeekStartDate |   WeekEndDate | 
|---------------------|---------------------| 
| 2016-01-03 00:00:00 | 2016-01-09 00:00:00 | 

|  WeekStartDate |   WeekEndDate | 
|---------------------|---------------------| 
| 2016-12-25 00:00:00 | 2016-12-31 00:00:00 | 
0

Sie müssen Wochentag des ersten Tages im Jahr
, wenn es nicht 1 entspricht dann Sie h ave zu set @weekStart = @weekStart -1
und set @StartingDate = first day in year

Verwandte Themen