使用子查询时出现“日期与int不兼容”

问题描述

我还是sql的新手。我试图显示所有“人”记录的出生日期在1955年之前,使用子查询提取该年之前的所有员工出生日期:

SELECT 
    PP.FirstName,PP.LastName
FROM 
    Person.Person PP
INNER JOIN
    HumanResources.Employee HE ON PP.BusinessEntityID = HE.BusinessEntityID
WHERE 
    BirthDate = (SELECT YEAR(BirthDate)
                 FROM HumanResources.Employee
                 WHERE YEAR(BirthDate) < 1955)

我尝试过分别运行主查询和子查询,它们都可以工作。但是一起使用它们,我会收到错误消息:

Msg 206,第16级,状态2,第2行
操作数类型冲突:日期与int不兼容

我想念什么?谢谢,如果您决定提供帮助。

解决方法

您可能还打算在BirthDate子句中比较WHERE的年份,而不是日期本身:

SELECT PP.FirstName,PP.LastName
FROM Person.Person PP
INNER JOIN HumanResources.Employee HE
    ON PP.BusinessEntityID = HE.BusinessEntityID
WHERE YEAR(BirthDate) IN (SELECT YEAR(BirthDate)         -- change is here
                          FROM HumanResources.Employee
                          WHERE YEAR(BirthDate) < 1955);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...