如何将条件添加到刚刚添加的新列中? -SQL-

时间:2017-04-05 19:44:55

标签: sql

查询在

下面
select fname,lname,DATEDIFF(YY,birthdate,GETDATE()) as age from EMPLOYEE where age = 72

但是有错误说 - > “列名'年龄'无效。

我该如何解决?谢谢!

3 个答案:

答案 0 :(得分:1)

在SQL Server中,您必须重复表达式(来自select)以在where子句中使用它:

select fname,lname,DATEDIFF(Year,birthdate,GETDATE()) as age 
from EMPLOYEE 
where DATEDIFF(Year,birthdate,GETDATE()) = 72

除非使用类似cross apply()的内容来创建计算字段。

答案 1 :(得分:1)

我最喜欢在SQL Server中执行此操作的方法是使用横向连接:

select e.fname, e.lname, v.age
from EMPLOYEE e cross apply
     (values (DATEDIFF(year, birthdate, GETDATE())) v(age)
where v.age = 72;

注意:

  • 更传统的解决方法是使用CTE,子查询或重复表达。
  • 更重要的是,你对年龄有一个非常神秘的定义。它现在是2017-04-05我在哪里。我的算术,2016年出生的人的年龄将为" 1"。

答案 2 :(得分:0)

只需重复where子句中的表达式:

select fname,
    lname,
    DATEDIFF(YY, birthdate, GETDATE()) as age
from EMPLOYEE
where DATEDIFF(YY, birthdate, GETDATE()) = 72