Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL中的年龄计算器_Sql Server_Tsql - Fatal编程技术网

Sql server SQL中的年龄计算器

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()

我有下面的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())-
                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进行学习。表示层的存在是有原因的。:)这是一个很好的问题,因为它显示了提问者现有的努力。非常感谢…上帝保佑你,不客气!如果您满意,请接受我的回答;-)我很高兴你找到了一个有用的答案。请考虑通过点击左边的灰色复选标记来接受答案。它会奖励回答问题的人一些声望点数,你也会得到一些。