获取当前年份和出生日期之间的年龄,并给出**“转换日期和/或字符串中的时间时转换失败。”**
问题描述:
我需要从表PERSON中获取age >=70
的名称P列和列BIRTHDATE(varchar( 8))。获取当前年份和出生日期之间的年龄,并给出**“转换日期和/或字符串中的时间时转换失败。”**
只是在我开始做显示年龄> = 70之前尝试这个查询。
select DATEDIFF (year , person.BirthDate, GETDATE()) as Age, * from person
这个查询给出
“转换从字符串转换日期和/或时间时失败了。”
我应该怎么做?我真的无法想象。谢谢
答
看来,出生日期列是varchar数据类型。尝试将它转换成日期时间
SELECT
DATEDIFF (year , cast(person.BirthDate as datetime),
GETDATE()) as Age, *
FROM
person
答
您可以使用下面
SELECT DATEDIFF(year , Convert(datetime,person.birthdate, 120), GETDATE()) as Age FROM persons
查询,这是首先你person.birthdate
列转换为日期,然后找到差异
+1
但'DATEDIFF'计数*转换*。它并不决定大多数人将其定义为年龄。如果你在今年1月1日运行上述代码,那么对于出生日期为“20151231”的人,它将返回1.大多数人不认为某人在一天之内成为1. –
+0
此外,你的表名是错误的。 –
什么是日期的格式'person.BirthDate'? – cdm
你不能在varchar列中使用DATEDIFF。您必须将/ var varchar转换为datetime/date。 – Manoj
你能提供一个这个行看起来像什么样或表格架构的例子吗? –