2015-08-16 124 views
1

我试图通过调用以下函数来计算从他们的DOB到个人的年龄,从而在表中填充字段。当我执行代码时,我收到以下错误:编码函数从DOB计算年龄

The error incorrect syntax near the keyword 'END'

我不知道为什么?请帮忙。

CREATE FUNCTION findAge 
(@dateOfBirth DATE) 
AS 
RETURNS INT 
BEGIN 
RETURN (FLOOR(DATEDIFF(YEAR,@dateOfBirth, GETDATE())) 
END 
+1

除了答案中指出的语法错误之外,此函数不会正确返回年龄,因为DATEDIFF只计算交叉日期部分边界的数量。考虑改为'返回(CAST(CONVERT(char(8),GETDATE(),112)as int) - CAST(CONVERT(char(8),@dateOfBirth,112)as int))/ 10000;' –

+0

只需添加到@DanGuzman的回答:Peter Larsson对此有一个很好的写作。 http://www.sqlteam.com/article/datediff-function-demystified – etliens

回答

2
CREATE FUNCTION findAge (@dateOfBirth DATE) 
RETURNS INT 
AS 
BEGIN 
    DECLARE @Age INT; 

    SET @Age = FLOOR(DATEDIFF(YEAR,@dateOfBirth, GETDATE())); 
    RETURN @Age; 
END 
+0

感谢您的帮助,感觉像一个白痴没有发现)我自己:) – BCC

0
RETURN (FLOOR(DATEDIFF(YEAR,@dateOfBirth, GETDATE()))) 

你缺少一个右)这里。

+0

感谢您的帮助,感觉像一个白痴没有发现)我自己:) – BCC