Sql AYOFYEAR,生日)+365-DATEPART(DAYOFYEAR,GETDATE()) (完) 选择姓名、演员阵容(月(生日)为NVARCHAR(2)) +“/”+将日期(生日)转换为NVARCHAR(2))[Dob月/日],将日期部分(DAYOFY

Sql AYOFYEAR,生日)+365-DATEPART(DAYOFYEAR,GETDATE()) (完) 选择姓名、演员阵容(月(生日)为NVARCHAR(2)) +“/”+将日期(生日)转换为NVARCHAR(2))[Dob月/日],将日期部分(DAYOFY,sql,sql-server,tsql,Sql,Sql Server,Tsql,AYOFYEAR,生日)+365-DATEPART(DAYOFYEAR,GETDATE()) (完) 选择姓名、演员阵容(月(生日)为NVARCHAR(2)) +“/”+将日期(生日)转换为NVARCHAR(2))[Dob月/日],将日期部分(DAYOFYEAR,生日)转换为[DAYOFYEAR], 当(DATEPART(DAYOFYEAR,BIRTHDAY)-DATEPART(DAYOFYEAR,GETDATE())大于0时的情况 然后 DATEPART(DAYOFYEAR,生日)-DATEP

AYOFYEAR,生日)+365-DATEPART(DAYOFYEAR,GETDATE()) (完)
选择姓名、演员阵容(月(生日)为NVARCHAR(2))
+“/”+将日期(生日)转换为NVARCHAR(2))[Dob月/日],将日期部分(DAYOFYEAR,生日)转换为[DAYOFYEAR],
当(DATEPART(DAYOFYEAR,BIRTHDAY)-DATEPART(DAYOFYEAR,GETDATE())大于0时的情况
然后
DATEPART(DAYOFYEAR,生日)-DATEPART(DAYOFYEAR,GETDATE())
其他的
DATEPART(DAYOFYEAR,生日)+365-DATEPART(DAYOFYEAR,GETDATE())
终止
AS[DAYSTILLBURTHDAY]
来自联系人
哪里有生日“9999-01-01 00:00:00.000”
订购依据(DATEPART(DAYOFYEAR,生日)-DATEPART(DAYOFYEAR,GETDATE())>0时的大小写)
然后
DATEPART(DAYOFYEAR,生日)-DATEPART(DAYOFYEAR,GETDATE())
其他的
DATEPART(DAYOFYEAR,生日)+365-DATEPART(DAYOFYEAR,GETDATE())
(完)


请提供样本数据和所需结果。请提供样本数据和所需结果。嗨,波迪卢斯卡,谢谢你抽出时间。我已按预期结果编辑了我的问题。您可以重做查询以满足该条件吗?嗨,波迪卢斯卡,谢谢您抽出时间。我已按预期结果编辑了我的问题。您可以重做查询以满足该条件吗?感谢您的时间,我们的朋友M.Ali代码工作顺利。这是因为我在您发布示例ddl和示例数据之前编写了它。。。情人节快乐。我已经修改了我的答案,以获得一整年的生日,但与今天的日期(以2014年2月14日为例)顺序正确。感谢您的时间,我们的朋友M.阿里代码工作顺利。这是因为我在您发布示例ddl和示例数据之前编写了它。。。情人节快乐。我已经修改了我的答案,以获得一整年的生日,但与今天的日期(以2014年2月14日为例)顺序正确。很高兴这有助于我进一步更新我的答案,以获得预期结果集中显示的格式的结果。那么,当你在12月31日运行此功能时,会发生什么?虽然很简单,你在12月31日运行时没有结果…对于1月1日出生的人。排除where子句,因为我认为你不想显示姓名谁的生日已经过去了,在31月12日每个人的生日都已经过去了,所以它不会显示任何姓名,我现在在打电话,所以不能做任何更改:让你的where子句中的is not null保持不变,其余的应该可以//已经过生日的用户应该排在列表的末尾,考虑下一年使用他们//我认为这是问题的原始和编辑的一部分。很高兴这有助于我进一步更新我的回答以预期结果集中显示的格式获取结果。那么,当您在12月31日运行此选项时,会发生什么?虽然很简单,但对于出生于1月1日的人来说,在12月31日运行此选项时不会得到任何结果。请排除where子句,因为我认为您不想显示B日已过的姓名,在12月31日,每个人的尸体都不见了,所以它不会显示任何名字,我现在在打电话,所以不能做任何更改:让你的where子句中的is not null保持不变,其余的就可以了//已经过生日的用户应该在列表的末尾考虑他们来年的情况//我认为这是问题的原始和编辑的一部分。在[DAYSTILLBURTHDAY]中的小偏移量(这不是问题的一部分),而是一个正确完整的列表。在[DAYSTILLBURTHDAY]中有轻微偏移(这不是问题的一部分),但却是一个正确完整的列表。
select B from A (order by/where)?
USER     DATE
MARCELO  1988-04-11
RICARDO  1965-12-30
WILSON   1977-02-20
PABLO    1985-01-10
JOHN     NULL
WILSON    20/02 (Month/Day)
MARCELO   11/04
RICARDO   30/12
PABLO     10/01
(JOHN NOT IN THE LIST)
select name, birthdate
from yourtable
where birthdate is not null
order by datepart(dy,dateadd(d,- DATEPART(dy, getdate()),birthdate ))
    IF OBJECT_ID('tempdb..#Employee') IS NOT NULL
    begin
            drop table #Employee
    end


    CREATE TABLE #Employee
    ( 
    SurrogateKeyIDENTITY int not null IDENTITY (1,1) , 
    NameOf varchar(12) not null , 
    BirthDate datetime not null
    )


    Insert into #Employee (NameOf, BirthDate)

    Select 'A', '01/01/1999'
    UNION ALL Select 'B', '01/16/1941'
    UNION ALL Select 'C', '01/29/1965'
    UNION ALL Select 'D', '02/13/1944'
    UNION ALL Select 'P', '02/14/1978'
    UNION ALL Select 'Q', '02/15/1984'
    UNION ALL Select 'R', '03/13/1948'
    UNION ALL Select 'S', '04/16/1983'
    UNION ALL Select 'T', '05/17/1953'
    UNION ALL Select 'U', '07/19/1959'
    UNION ALL Select 'V', '08/16/1959'
    UNION ALL Select 'W', '09/1/1959'
    UNION ALL Select 'X', '10/30/1959'
    UNION ALL Select 'Y', '11/16/1959'
    UNION ALL Select 'Z', '12/31/1972'


Declare @MyCURRENT_TIMESTAMP datetime
/* select @MyCURRENT_TIMESTAMP = CURRENT_TIMESTAMP */
select @MyCURRENT_TIMESTAMP = '02/14/2014'

Declare @NumberOfMonthsToGoOut int
select @NumberOfMonthsToGoOut = 12



;WITH myCalculationsCTE (NameOf, BirthDate, [NoYearBirthDate] , [NoYearCurrentDate] )
AS
(
    SELECT NameOf, BirthDate
    , DATEFROMPARTS( 1900 , MONTH(BirthDate), DAY (BirthDate)) [NoYearBirthDate]
    , DATEFROMPARTS( 1900 , MONTH(@MyCURRENT_TIMESTAMP), DAY (@MyCURRENT_TIMESTAMP)) [NoYearCurrentDate]
    FROM #Employee
    WHERE BirthDate IS NOT NULL
)
,
myCTE (NameOf, BirthDate, [NoYearBirthDate] , [NoYearCurrentDate] , DerivedMonthDiff)
AS
(
    SELECT NameOf, BirthDate
    , [NoYearBirthDate]
    , [NoYearCurrentDate]

    , [DerivedMonthDiff] = CASE 
        WHEN [NoYearBirthDate] >= [NoYearCurrentDate] 
            then DATEDIFF(m , [NoYearCurrentDate], [NoYearBirthDate] )  
        else 
            DATEDIFF(m , [NoYearCurrentDate], [NoYearBirthDate]) + 12 end

    FROM myCalculationsCTE
)

SELECT NameOf, BirthDate , [NoYearBirthDate] , [NoYearCurrentDate] 
    , DerivedMonthDiff
    , MONTH([NoYearBirthDate]) [Month]
    , DAY ([NoYearBirthDate]) [DayOf]

    FROM myCTE
    where [DerivedMonthDiff] <= @NumberOfMonthsToGoOut
    order by DerivedMonthDiff , MONTH([NoYearBirthDate]) , DAY ([NoYearBirthDate]) 

    IF OBJECT_ID('tempdb..#Employee') IS NOT NULL
    begin
            drop table #Employee
    end
DECLARE @TABLE TABLE(Name VARCHAR(100),Dob DATETIME)
INSERT INTO @TABLE VALUES
('Mark', '19961017'),('Josh', '19801119'),('Sam', '19700709'),
('Vicky', '19500210'),('Dom', '19890308'),('Paul', '19840401')
,('Nick', NULL)
SELECT Name, CAST(MONTH(Dob) AS NVARCHAR(2)) 
              + '/' + CAST(DAY(Dob) AS NVARCHAR(2)) [Dob Month/Day]
FROM @TABLE
WHERE DATEPART(DAYOFYEAR,Dob) - DATEPART(DAYOFYEAR,GETDATE()) > 0
ORDER BY ABS(DATEPART(DAYOFYEAR,Dob) - DATEPART(DAYOFYEAR,GETDATE()))
╔══════╦═══════════════╗
║ Name ║ Dob Month/Day ║
╠══════╬═══════════════╣
║ Dom  ║ 3/8           ║
║ Paul ║ 4/1           ║
║ Sam  ║ 7/9           ║
║ Mark ║ 10/17         ║
║ Josh ║ 11/19         ║
╚══════╩═══════════════╝
SELECT Name, CAST(MONTH(BIRTHDAY) AS NVARCHAR(2)) 
              + '/' + CAST(DAY(BIRTHDAY) AS NVARCHAR(2)) [Dob Month/Day],DATEPART(DAYOFYEAR,BIRTHDAY) as [dayofyear],
              case when (DATEPART(DAYOFYEAR,BIRTHDAY) - DATEPART(DAYOFYEAR,GETDATE()) > 0)
              THEN
              DATEPART(DAYOFYEAR,BIRTHDAY) - DATEPART(DAYOFYEAR,GETDATE())
              ELSE
              DATEPART(DAYOFYEAR,BIRTHDAY) + 365-DATEPART(DAYOFYEAR,GETDATE())
              END
              AS [DAYSTILLBURTHDAY]
FROM CONTACTS
WHERE BIRTHDAY <> '9999-01-01 00:00:00.000'
ORDER BY (case when (DATEPART(DAYOFYEAR,BIRTHDAY) - DATEPART(DAYOFYEAR,GETDATE()) > 0)
              THEN
              DATEPART(DAYOFYEAR,BIRTHDAY) - DATEPART(DAYOFYEAR,GETDATE())
              ELSE
              DATEPART(DAYOFYEAR,BIRTHDAY) + 365-DATEPART(DAYOFYEAR,GETDATE())
              END)