Получить DOB от значения Int, например,31 год,3 месяца,30 дней из SQL-запроса

Я пытаюсь получить DOB из определения значений в 3 различных текстовых окнах с помощью SQL-запроса

1) Первое текстовое поле содержит год, например: 30

2) Второе текстовое поле содержит месяц, например: 03

3) Третье текстовое поле содержит день, например: 30

Так что я хочу дату выше значений. Моя работа вокруг следующим образом:

declare @Year int = 31,
@month int = 4,
@day int = 0

Declare @TempDate Datetime,@TempDayPart int,@TempYearPart int,@TempMonthPart int,@FinalDate datetime,@checkLeapYear int,@chkChkDay int

SET @TempDate =DATEADD(YEAR, -@Year,CONVERT(date, GETDATE(),103))

select @TempDate as yearcount

SET @TempDate = DATEADD(MONTH, -@month , @TempDate)

select @TempDate as monthcount

SET @TempDate = DATEADD(DAY, -@day, @TempDate)

select @TempDate as FinalDate

Эта функция работает нормально для большинства сценариев, но она не верна для месяца февраля, чей день рождения больше, чем сегодняшний день

Примечание: для проверки используйте эту ссылку http://www.calculator.net/age-calculator.html

1) Дата задачи: 17-02-1986[или используйте любую большую дату от месяца февраля до сегодняшнего дня, например, сегодня 16-го, поэтому вы можете использовать 17–28 или 29 для расчета ФЕВ]

2 ответа

Попробуйте изменить ваши вычисления DATEADD в следующем порядке:::

SET @TempDate =DATEADD(DAY, -@day,CONVERT(date, GETDATE(),103))

--select @TempDate as daycount

SET @TempDate = DATEADD(MONTH, -@month , @TempDate)

--select @TempDate as monthcount

SET @TempDate = DATEADD(YEAR, -@year, @TempDate)

select @TempDate as FinalDate

Я думаю, что было бы лучше установить DOB, используя функцию to_date, конвертируя целые числа года, месяца и дня в переменную Date. Похоже, вы пытаетесь показать, сколько лет кто-то на основе их DOB, так что этот метод также облегчит это, найдя разницу между двумя датами.

Другие вопросы по тегам