2014-01-29 47 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 ║ 
╚═════╝