根据生日获取年龄不仅仅是“多少岁”,还可能涉及到年龄不到“1岁”、不到“1月”、不到“1天”、不到“1小时”、不到“1分钟”的情况,整理如下脚本,做以笔记:
DECLARE @BirthDate DATETIME DECLARE @CurrentDate DATETIME SET @BirthDate = '2014-04-29 12:59:00.000' SET @CurrentDate = '2014-04-29 13:10:23.000' DECLARE @DiffInYears INT DECLARE @DiffInMonths INT DECLARE @DiffInDays INT DECLARE @DiffInHours INT DECLARE @DiffInMinutes INT DECLARE @DiffInSeconds INT DECLARE @TotalSeconds BIGINT -- Determine Year, Month, and Day differences SET @DiffInYears = DATEDIFF(year, @BirthDate, @CurrentDate) IF @DiffInYears > 0 SET @BirthDate = DATEADD(year, @DiffInYears, @BirthDate) IF @BirthDate > @CurrentDate BEGIN -- Adjust for pushing @BirthDate into future SET @DiffInYears = @DiffInYears - 1 SET @BirthDate = DATEADD(year, -1, @BirthDate) END SET @DiffInMonths = DATEDIFF(month, @BirthDate, @CurrentDate) IF @DiffInMonths > 0 SET @BirthDate = DATEADD(month, @DiffInMonths, @BirthDate) IF @BirthDate > @CurrentDate BEGIN -- Adjust for pushing @BirthDate into future SET @DiffInMonths = @DiffInMonths - 1 SET @BirthDate = DATEADD(month, -1, @BirthDate) END SET @DiffInDays = DATEDIFF(day, @BirthDate, @CurrentDate) IF @DiffInDays > 0 SET @BirthDate = DATEADD(day, @DiffInDays, @BirthDate) IF @BirthDate > @CurrentDate BEGIN -- Adjust for pushing @BirthDate into future SET @DiffInDays = @DiffInDays - 1 SET @BirthDate = DATEADD(day, -1, @BirthDate) END -- Get number of seconds difference for Hour, Minute, Second differences SET @TotalSeconds = DATEDIFF(second, @BirthDate, @CurrentDate) -- Determine Seconds, Minutes, Hours differences SET @DiffInSeconds = @TotalSeconds % 60 SET @TotalSeconds = @TotalSeconds / 60 SET @DiffInMinutes = @TotalSeconds % 60 SET @TotalSeconds = @TotalSeconds / 60 SET @DiffInHours = @TotalSeconds -- Display results SELECT @DiffInYears AS YearsDiff, @DiffInMonths AS MonthsDiff, @DiffInDays AS DaysDiff, @DiffInHours AS HoursDiff, @DiffInMinutes AS MinutesDiff, @DiffInSeconds AS SecondsDiff