Получить 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, так что этот метод также облегчит это, найдя разницу между двумя датами.