SQL Server基于月和日的生日列表

Cre*_*er7 2 sql sql-server

我目前有一张表,上面写着姓名,出生日和出生月份.

示例表数据:

Name           Day       Month
Joe Bloggs     21         10
Billy Earner   12         6
Run Code Online (Sandbox Code Playgroud)

我已经构建了一个查询,将在当年(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
Run Code Online (Sandbox Code Playgroud)

来自查询的示例数据:

Name                DOB
Joe Bloggs      2016-10-21
Billy Earner    2016-06-12
Run Code Online (Sandbox Code Playgroud)

但是我希望能够在明年和同一张桌子中填充这个.所以这张桌子将显示2016年和2017年的生日.

问题:这是否可行,如果是,我将如何在SQL Server中生成此视图

预期成绩:

Name                DOB
Joe Bloggs      2016-10-21
Billy Earner    2016-06-12
Joe Bloggs      2017-10-21
Billy Earner    2017-06-12
Run Code Online (Sandbox Code Playgroud)

附加信息:

由于我不希望这个视图变大,我只希望视图显示当前年份和下一年.因此,一旦2017年到来,我希望此视图适应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)
Run Code Online (Sandbox Code Playgroud)

Joh*_*tti 5

你可以使用一个简单的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)
Run Code Online (Sandbox Code Playgroud)

返回

Name            DOB
Joe Bloggs      2016-10-21
Joe Bloggs      2017-10-21
Billy Earner    2016-06-12
Billy Earner    2017-06-12
Run Code Online (Sandbox Code Playgroud)