2017-09-12 9 views
0

나는 이미 주 숫자를 얻는 것을 발견한다, 그러나, 그것은 다른 방법으로 날짜를 보여준다.내 경우 SQL Server를 사용하여 주 번호를 사용하여 주 시작 날짜와 종료 날짜를 얻는 방법?

는 사실은 내가

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

output: 1 

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

output: 2 

의 날짜의 주 번호를 확인하면하지만 시작 주 번호를 사용하여 주 날짜를 종료 날짜를 얻을 때, 그것은 다른 보여줍니다. 내가 주 = 1 줄이 STARTINGDATE이 **에게 2016-01-01 및 ** EndingDate = 주 번호 22016-01-02

, 그것은 주어야한다 = 주어야한다 만약 내가 출력을 기대하고

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 

이며, 그 다음 시간 1에 해당하지 않는 경우 2016-01-03 2016-01-09

+0

가 난 그냥 차원 테이블 .... HTTPS를 만들 것이라고 당신은 정말 끝이 + 시작 육일 때문에 시작을 계산해야합니다. mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/ – scsimon

답변

1

에 들이죠.

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 

결과 : // WWW :

|  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

당신은 올해
에 첫 번째 날의 요일을 얻을 수있다 당신은 일주일 동안 절대 시작/끝을 얻을 후 당해 년도 첫 주에 시작하고, 지난 주에 끝을 조정할 수 있습니다 set @weekStart = @weekStart -1
set @StartingDate = first day in year