2016-04-22 31 views
0

我需要从表PERSON中获取age >=70的名称P列和列BIRTHDATE(varchar( 8))。获取当前年份和出生日期之间的年龄,并给出**“转换日期和/或字符串中的时间时转换失败。”**

只是在我开始做显示年龄> = 70之前尝试这个查询。

select DATEDIFF (year , person.BirthDate, GETDATE()) as Age, * from person 

这个查询给出

“转换从字符串转换日期和/或时间时失败了。”

我应该怎么做?我真的无法想象。谢谢

+0

什么是日期的格式'person.BirthDate'? – cdm

+0

你不能在varchar列中使用DATEDIFF。您必须将/ var varchar转换为datetime/date。 – Manoj

+0

你能提供一个这个行看起来像什么样或表格架构的例子吗? –

回答

1

看来,出生日期列是varchar数据类型。尝试将它转换成日期时间

SELECT 
    DATEDIFF (year , cast(person.BirthDate as datetime), 
    GETDATE()) as Age, * 
FROM 
    person 
4

您可以使用下面

SELECT DATEDIFF(year , Convert(datetime,person.birthdate, 120), GETDATE()) as Age FROM persons 

查询,这是首先你person.birthdate列转换为日期,然后找到差异

+1

但'DATEDIFF'计数*转换*。它并不决定大多数人将其定义为年龄。如果你在今年1月1日运行上述代码,那么对于出生日期为“20151231”的人,它将返回1.大多数人不认为某人在一天之内成为1. –

+0

此外,你的表名是错误的。 –

相关问题