0
這是我用來創建日曆的語法。我的問題是,自第1周的開始日期是2012年以來,startdate顯示爲空。是否有辦法讓startdate(或其他實例中的enddate)填充,即使它在不同的年份? @Winds Of Change --- 這增加了之前爲空的開始日期和結束日期。但是我所追求的是,例如,我需要我的日期範圍來運行星期六至星期三。那麼讓我們在2013年的第53周。日期範圍應該是12/28/2013 - 01/01/14。有沒有一種方法可以修補calander以這種格式顯示?當日期在上一年開始時顯示爲空的日曆
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
這增加了之前爲空的開始日期和結束日期。但是我所追求的是,例如,我需要我的日期範圍來運行星期六至星期三。那麼讓我們在2013年的第53周。日期範圍應該是12/28/2013 - 01/01/14。有沒有一種方法可以修補calander以這種格式顯示? (原始文章修改爲相同的添加) – MasterOfStupidQuestions
請查看我的最新更改,看看他們是否有所幫助。 –
這是我得到 2013年12月28日\t 12/31/2013 2014年1月1日\t 2014年1月3日 我能有這樣的組合輸出,要麼顯示第53周12/28/2013 - 01/03/2014或第1周結算12/28/2013 - 01/03/2014? – MasterOfStupidQuestions