, вероятно, не самый эффективный способ пойти об этом, но вот как я это сделал:
я должен был сначала получить разницу дат между сегодняшним дату и дату рождения человека. Я использовал его, чтобы получить годы, месяцы, дни и т. Д., Объединив его с функциями ABS() и Remainder (%).
declare @year int = 365
declare @month int = 30
declare @sixYears int = 2190
select
--CAST(DATEDIFF(mm, a.BirthDateTime, getdate()) AS VARCHAR) as GetMonth,
--CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, a.BirthDateTime, getdate()), a.BirthDateTime), getdate()) AS VARCHAR) as GetDays,
CASE
WHEN
DATEDIFF(dd,a.BirthDateTime,getdate()) < @year
THEN
cast((DATEDIFF(dd,a.BirthDateTime,getdate())/(@month)) as varchar) +' Months & ' +
CAST(ABS(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, a.BirthDateTime, getdate()), a.BirthDateTime), getdate())) AS VARCHAR)
+ ' Days'
WHEN
DATEDIFF(dd,a.BirthDateTime,getdate()) between @year and @sixYears
THEN
cast((DATEDIFF(dd,a.BirthDateTime,getdate())/(@year)) as varchar) +' Years & ' +
CAST((DATEDIFF(mm, a.BirthDateTime, getdate()) % (12)) AS VARCHAR) + ' Months'
WHEN DATEDIFF(dd,a.BirthDateTime,getdate()) > @sixYears
THEN cast(a.Age as varchar) + ' Years'
end as FinalAGE,
Пожалуйста, объясните, что происходит, когда кто-то родился в конце месяца. Скажите, что кто-то родился 31 марта, каков его возраст 30 апреля, 1 мая и т. Д.? –
* Царапины моей головы * .. Как насчет также отображения дней после месяца. Таким образом, нет оснований определять, какой месяц использовать. Я уточню свой вопрос. – NonProgrammer
Также вы упомянули, что хотите формат MM и дни. Означает ли это «05 & 02» или вы действительно хотите, чтобы это было выписано, как показано в примерах, и пропустив ведущий 0? – Ralph