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

标签 sql sql-server

我目前有一个表格,里面有名字,出生日期和出生月份。

示例表数据:

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/

相关文章:

sql-server - 在SQL Server 2005中,如何获取 View 所依赖的其他数据库中的表?

SQL 服务器 2012 :Generate column values Dynamically based on concatenation of other column values

sql-server - SQL Server 列的默认随机 10 个字符串值

c# - 压缩图片和照片存储在SQL Server数据库中

php - 当数组值与数据库值匹配时如何重定向页面

sql - 将存储过程的返回值分配给 SQL 中的变量的最佳方法是什么?

sql - 如何选择与同一个表中的相应行不匹配的行?

sql - 规范化逻辑层次结构的度量总和

sql-server - 在 SSMS 中自动换行 IsNull([text], 0) 中选定文本的键盘快捷键

mysql - SQL COUNT() 查询放置