이것은 캘린더를 만들 때 사용하는 구문입니다. 내가 가진 문제는 Week1의 시작일이 2012 년 이래로 시작일이 null로 표시된다는 것입니다. 다른 해에도 시작일 (또는 다른 경우 종료일)을 채우는 방법이 있습니까? @Winds of Change --- 이전에 null 인 시작 날짜와 종료 날짜를 추가합니다. 하지만 내가 쫓고있는 것은 예를 들어, 토요일을 실행하려면 내 기간이 필요합니다. 그럼 2013 년 53 주를 가져 가자. 날짜 범위는 12/28/2013 - 01/01/14이어야합니다. 캘린더가 그 형식으로 표시되도록 조정할 수있는 방법이 있습니까?날짜가 작년에 시작될 때 캘린더가 null로 표시됩니다.
CREATE TABLE dbo.Calendar (
CalendarYear INT NOT NULL,
CalendarWeek INT NOT NULL,
WeekStartDate VARCHAR(50),
WeekEndDate VARCHAR(50),
CONSTRAINT PK_Calendar PRIMARY KEY (
CalendarYear,
CalendarWeek
)
)
SET DATEFIRST 6
DECLARE @StartDate DATETIME,
@NumOfDays INT
SET @StartDate = '20130101'
SET @NumOfDays = 1000;
WITH calendar
AS (
SELECT TOP (@NumOfDays) dateadd(day, row_number() OVER (
ORDER BY sc1.column_id
) - 1, @StartDate) AS CalendarDate
FROM sys.columns sc1
CROSS JOIN sys.columns sc2
)
INSERT INTO dbo.Calendar (
CalendarYear,
CalendarWeek,
WeekStartDate,
WeekEndDate
)
SELECT DATEPART(year, c.CalendarDate) AS Year,
convert(VARCHAR(100), DATEPART(week, c.CalendarDate)) AS Week, --DATEPART(week, c.CalendarDate) AS Week,
MAX(CASE DATEPART(WEEKDAY, c.CalendarDate)
WHEN 1
THEN convert(VARCHAR(50), c.CalendarDate, 101)
ELSE NULL
END) AS StartDate,
MAX(CASE DATEPART(WEEKDAY, c.CalendarDate)
WHEN 7
THEN convert(VARCHAR(50), c.CalendarDate, 101)
ELSE NULL
END) AS EndDate
FROM calendar c
GROUP BY DATEPART(year, c.CalendarDate),
DATEPART(Week, c.CalendarDate)
ORDER BY Year,
startdate,
convert(VARCHAR(100), DATEPART(week, c.CalendarDate)) --Week
SELECT *
FROM dbo.Calendar
이전에 null 인 시작 날짜와 종료 날짜가 추가됩니다. 하지만 내가 쫓고있는 것은 예를 들어, 토요일을 실행하려면 내 기간이 필요합니다. 그럼 2013 년 53 주를 가져 가자. 날짜 범위는 12/28/2013 - 01/01/14이어야합니다. 캘린더가 그 형식으로 표시되도록 조정할 수있는 방법이 있습니까? (원본 게시물은 동일하게 수정 됨) – MasterOfStupidQuestions
최근 변경 사항이 도움이되는지 확인하십시오. –
이것은 내가 2014년 1월 1일 \t 2014년 1월 3일 2013년 12월 28일 \t 12/31/2013 2014 I이 결합 수 있었 을까 얻을 출력이든 쇼입니다 2013 년 12 월 28 일 - 2013 년 1 월 3 일 또는 1 주일 후 실행 2012 년 12 월 28 일 - 2014 년 1 월 3 일? – MasterOfStupidQuestions