【问题标题】:"Date is Incompatible with int" while using sub-query使用子查询时“日期与 int 不兼容”
【发布时间】:2020-11-05 05:09:06
【问题描述】:

我还是 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)

我试过分别运行主查询和子查询,它们都可以工作。但是将它们一起使用,我得到了那个错误:

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

我错过了什么?谢谢,如果您决定提供帮助。

【问题讨论】:

    标签: sql-server date subquery incompatibility


    【解决方案1】:

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

    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);
    

    【讨论】:

    • 嗯。您可能在这里遇到了一些问题,但它返回了一个不同的错误:“子查询返回超过 1 个值。当子查询遵循 =、!=、、>= 或使用子查询时,这是不允许的作为一种表达。”我猜它不喜欢 = 运算符。有什么可以代替的吗?
    • 对不起...将 where 子句更改为 WHERE IN (SELECT YEAR(BirthDate) ...)
    猜你喜欢
    • 2017-08-28
    • 2019-10-31
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多