2015-08-16 53 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