【发布时间】:2016-04-22 16:23:25
【问题描述】:
我需要从表 PERSON 和列 BIRTHDATE(varchar(8)) 中获取名称为 age >=70 的名称。
在我开始显示年龄 >=70 之前尝试此查询。
select DATEDIFF (year , person.BirthDate, GETDATE()) as Age, * from person
这个查询给出了
“从字符串转换日期和/或时间时转换失败。”
我该怎么做?我实在想不通。谢谢
【问题讨论】:
-
person.BirthDate中的日期格式是什么? -
您不能将 DATEDIFF 与 varchar 列一起使用。您必须将 varchar 转换/转换为日期时间/日期。
-
你能提供一个行的样子或表架构的例子吗?
-
@cdm person.birthdate 是 varchar
-
如果您将日期存储为
varchar,那么您存储日期是错误的。此外,查询“此人的出生日期是否早于today - 70 years”比查找当前年满 70 岁或以上的人要容易得多(一旦您整理好您的转化)。尝试使用DATEDIFF的问题在于它计算transitions。如果您使用明显的DATEDIFF公式,12 月 31 日出生的人在 1 月 1 日是 1 岁。
标签: sql sql-server datediff