2014-01-29 75 views
-1

Fields  || Data 

ID   || V465 

DOB   || 1946-09-05 

DATE_OF_DEATH || 1974-05-11 

我使用這個SQL,但我得到一個錯誤查找年齡。SQL使用DateDiff的

select DATEDIFF("YYYY",'DOB','DATE_OF_DEATH') where ID= 'V465' 

它的SQL Server Management Studio中R2和

錯誤:消息207,級別16,狀態1,行2 無效列名 'ID'

+0

有什麼錯誤?你使用的是什麼RDBMS? – Mureinik

+1

在SQL Server中,單引號是文本分隔符 - 也許你打算使用[DOB],[DATE_OF_DEATH]。 – rheitzman

+1

認真嗎?你期望SQL Server猜測你想查詢哪個表嗎? –

回答

0
SELECT DATEDIFF(YY,'01-01-2001','12-31-2002') 

返回1,對MSSQL

5

您忘記了FROM(並用單引號將您的列名稱視爲字符串文字):

select DATEDIFF("YYYY",DOB,DATE_OF_DEATH) 
FROM {tablename} 
where ID= 'V465' 

而且DATEDIFF本身並不是確定 「年齡」 以正確的方式,因爲

DATEDIFF("yyyy",'2001-12-01','2003-01-31')

會給你2而不是1

見一個方法here和另一here

+0

我也不會使用''YYYY''',而是'YEAR'(更明確,因爲例如'Y'不會做你的想法),並且我認爲根本不需要雙引號。 –

0

該錯誤很可能來自不包括表中的select語句

select DATEDIFF(YY,DOB,DATE_OF_DEATH) AS AGE 
    FROM TABLE_NAME 
where ID= 'V465' 
0

測試數據

DECLARE @TABLE TABLE(ID VARCHAR(20),DOB DATE, DATE_OF_DEATH DATE) 
INSERT INTO @TABLE VALUES 
('V465', '1946-09-05', '1974-05-11'),('V466', '1945-09-05', '2000-11-11'), 
('V467', '1982-09-05', NULL),('V468', '1946-09-05', NULL) 

查詢

SELECT DATEDIFF(YEAR,DOB, COALESCE(DATE_OF_DEATH, GETDATE())) AS AGE 
FROM @TABLE 

使用COALESCE函數如果有人沒有死亡,但你也可以計算他們的年齡。 COALESCE函數與死亡日期不同,如果該列爲空,它將與今天的日期不同。並會給你以下結果。

結果

╔═════╗ 
║ AGE ║ 
╠═════╣ 
║ 28 ║ 
║ 55 ║ 
║ 32 ║ 
║ 68 ║ 
╚═════╝