首页 > 解决方案 > sql dateiff 比较年龄和hiredate

问题描述

第一次使用 Stack Overflow,所有的课程都被扔到网上,我在网上上课很糟糕。

问题很简单,我需要使用 datediff 收集公司开始时年龄在 35 岁或以下的员工的信息。

我的代码看起来像这样

Select EmployeeID, FirstName, LastName, BirthDate, HireDate,
datediff(year, BirthDate,HireDate) Age 
from Employees
where age<=35;

如果不使用“where”,它将发布人们开始时的年龄。我现在正在尝试显示我创建的年龄列,以发布小于或等于 35 岁或更年轻的每个人。但是,随着年龄的增长,我会遇到语法错误。显然它在sql数据库中不存在。任何帮助,将不胜感激。

标签: sqldateselectdatediff

解决方案


where子句不能引用子句中定义的别名(select后者在前者之后执行)。

您需要在两个子句中重复该表达式:

select 
    e.*, 
    datediff(year, BirthDate,HireDate) Age 
from employees e
where datediff(year, BirthDate,HireDate) <= 35

或者你可以使用一个 deried 表(子查询或公共表表达式)——但它的效率较低,而且对于这个简单的表达式来说似乎有点过分了:

select *
from (
    select
        e.*, 
        datediff(year, BirthDate,HireDate) age 
    from employees e
) e
where age <= 35

推荐阅读