Sql server SQL中的年龄计算器
我有下面的sQL查询,它显示了正确的结果“28岁,1个月,16天” 但是,我想,如果数字超过1,它会以年、月、日(复数)的形式显示 例如,在上面的结果中,年份大于1,则显示为28年Sql server SQL中的年龄计算器,sql-server,tsql,Sql Server,Tsql,我有下面的sQL查询,它显示了正确的结果“28岁,1个月,16天” 但是,我想,如果数字超过1,它会以年、月、日(复数)的形式显示 例如,在上面的结果中,年份大于1,则显示为28年 Declare @DOB datetime,@TempDate datetime,@Year int,@Month int,@Day int Set @DOB='09/13/1991' Set @TempDate=@DOB Select @Year=DateDiff(Year,@TempDate,getdate()
Declare @DOB datetime,@TempDate datetime,@Year int,@Month int,@Day int
Set @DOB='09/13/1991'
Set @TempDate=@DOB
Select @Year=DateDiff(Year,@TempDate,getdate())-
Case
When (Month(@TempDate)>Month(getdate()) or Month(@TempDate)=Month(getdate()) AND Day(@TempDate)>Day(getdate()))
Then 1
Else 0
End
Select @TempDate=DateAdd(YEAR,@Year,@DOB)
Select @Month=DateDiff(Month,@TempDate,getdate())-
Case
When (Month(@TempDate)>Month(getdate()) OR Day(@TempDate)>Day(getdate()))
Then 1
Else 0
End
Select @TempDate=DateAdd(Month,@Month,@TempDate)
Select @Day=DateDiff(Day,@TempDate,getdate())
Select Cast(@Year as nvarchar(2))+ ' Year, '+Cast(@Month as nvarchar(2))+ ' Month, '+Cast(@Day as nvarchar(2))+' Day old'
例如,尝试以下方法:
SELECT CAST(@Year AS NVARCHAR(2)) + IIF(@Year > 1,' Years, ','Year, ') + CAST(@Month AS NVARCHAR(2)) + IIF(@Month > 1,' Months, ',' Month, ') + CAST(@Day AS NVARCHAR(2)) + IIF(@Day > 1,' Days ',' Day ') + 'old'
如果您想要
'Year'
或'Year'
,那么这应该是表示层真正需要的东西。传递一列年、月、日(等)的值,然后让应用程序进行格式化。非主题:Cast(@Year as nvarchar(2))
@Larnu我想说,希望学习如何在SQL中应用逻辑的人不应该被劝阻。这可能是学校作业,在这种情况下,告诉他们作业是错误的是没有帮助的。如果这是学校作业,@PeterB,OP应该自己做作业,而不是我们我不是在劝阻他们想要学习,我是在劝阻他们不要用SQL进行学习。表示层的存在是有原因的。:)这是一个很好的问题,因为它显示了提问者现有的努力。非常感谢…上帝保佑你,不客气!如果您满意,请接受我的回答;-)我很高兴你找到了一个有用的答案。请考虑通过点击左边的灰色复选标记来接受答案。它会奖励回答问题的人一些声望点数,你也会得到一些。