2017-04-05 114 views
0

查询低于如何将条件添加到新添加的列中? -SQL-

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

,但有一个错误说? - >“无效列名‘年龄’

我该如何解决呢谢谢

+1

[不良习惯踢:使用速记与日期/时间操作 - 亚伦伯特兰](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick -using-short-date-time-operations.aspx) – SqlZim

回答

1

在! SQL Server,则必须重复的表达(从select)使用它where子句中:除非使用一些

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

cross apply()这样的东西来创建计算的字段。

+0

谢谢!晚上好! –

+0

@CelbisH。乐于帮助! – SqlZim

1

只是重复表达where子句中:

select fname, 
    lname, 
    DATEDIFF(YY, birthdate, GETDATE()) as age 
from EMPLOYEE 
where DATEDIFF(YY, birthdate, GETDATE()) = 72 
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”的年龄。