我想写一个函数,我可以找到年龄的基础上插入记录而不是getdate()。我想过滤那些注册时间少于18年的用户。 如果我在一年后查询它,它应该仍然基于记录插入日期显示用户为17,而不是当前日期。这是我写的,但它仍然根据当前日期给出的年龄比记录插入日期。任何建议都会非常有帮助。 谢谢函数来计算年龄
--InputDate as DateOfBirth
--InsertDate as date the record was inserted
CREATE FUNCTION [dbo].[FindAge] (@InputDate int, @Insertdate datetime)
RETURNS int
AS
BEGIN
DECLARE @Age as Int
DECLARE @d DATETIME
SET @d = CONVERT(DATETIME, CONVERT(VARCHAR(8), @InputDate), 112)
SELECT @Age=DATEDIFF(year, @d, @Insertdate)
- CASE WHEN DATEADD(year, DATEDIFF(year, @d, @Insertdate), @d) <= GetDate()
THEN 0 ELSE 1 END
RETURN @Age
END
---- Drop Obselete procs
GO
更新 其次培根建议,它完美地工作了。
这里你去:http://stackoverflow.com/questions/1572110/how-to-calculate-age-in-years-based-on-date-of-birth-and-getdate – CodeLikeBeaker
快速一瞥后,这看起来像*应该*工作。也许'@ InputDate'参数中有错误的值? –
我的代码已经获得基于getdate的年龄,但我需要基于创建的年龄,我认为我发布的代码应该处理它,但仍然是基于getdate()而不是createdate计算年龄。 – user2908229