我目前有一张表,上面写着姓名,出生日和出生月份.
示例表数据:
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)
你可以使用一个简单的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)
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |