我目前有一个表格,里面有名字,出生日期和出生月份。
示例表数据:
Name Day Month
Joe Bloggs 21 10
Billy Earner 12 6
我已经构建了一个查询,它将填充当年(2016 年)的生日:
SELECT
MyCalendarID,
Name,
CAST(CAST(DATEPART(YEAR, GETDATE()) AS varchar) + '-' + CAST(TheMonth AS varchar) + '-' + CAST(TheDay AS varchar) AS DATE) AS TheBirthday
FROM MyCalendar
来自查询的示例数据:
Name DOB
Joe Bloggs 2016-10-21
Billy Earner 2016-06-12
但是我希望能够在同一张表中填充明年的内容。所以这张表将显示 2016 年和 2017 年的生日。
问题 :这可能吗,如果可以,我将如何在 SQL Server 中生成此 View
预期成绩:
Name DOB
Joe Bloggs 2016-10-21
Billy Earner 2016-06-12
Joe Bloggs 2017-10-21
Billy Earner 2017-06-12
附加信息:
因为我不希望这个 View 变得很大,所以我只希望 View 显示当前年份和下一年。因此,一旦 2017 年到来,我希望此 View 能够调整以显示 2017 年和 2018 年
谢谢你在这件事上的帮助,我希望它不会太难
表创建和数据:
CREATE TABLE MyCalendar (MyCalendarID INT IDENTITY (1,1) NOT NULL,
Name VARCHAR(50),
TheDay INT,
TheMonth INT)
ALTER TABLE MyCalendar ADD CONSTRAINT MyCalendarID_PK PRIMARY KEY (MyCalendarID)
INSERT INTO MyCalendar VALUES ('Joe Bloggs', 21, 10)
INSERT INTO MyCalendar VALUES ('Billy Earner', 12, 6)
最佳答案
您可以使用简单的 CROSS APPLY 和 DateFromParts()
Declare @YourTable table (Name varchar(50),Day int,Month int)
Insert Into @YourTable values
('Joe Bloggs', 21, 10),
('Billy Earner', 12 , 6)
Select A.Name
,B.DOB
From @YourTable A
Cross Apply ( Values (DateFromParts(Year(GetDate()) ,A.Month,A.Day))
,(DateFromParts(Year(GetDate())+1,A.Month,A.Day))
) B (DOB)
退货
Name DOB
Joe Bloggs 2016-10-21
Joe Bloggs 2017-10-21
Billy Earner 2016-06-12
Billy Earner 2017-06-12
关于基于月份和日期的 SQL Server 生日列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41362146/