首页 > 解决方案 > 操作数类型冲突:日期与 sql server 中的 smallint 错误不兼容

问题描述

我写了一个 sql 查询来获取 2006 年到 2008 年之间的员工雇佣人数。这是我来自 Adventurework2014.dimemployee 表的代码

SELECT YEAR(cast('HireDate' as int)), DepartmentName,
        count(ParentEmployeeKey) AS 'total emplyee join' 
FROM DimEmployee 
where HireDate between 2006 and 2008 
group by DepartmentName, HireDate,FirstName,ParentEmployeeKey
ORDER BY  YEAR(HireDate)

我上面的代码显示错误

操作数类型冲突:日期与 smallint 不兼容

请帮我解决一些问题。

标签: sqlsql-server-2017

解决方案


您错过了使用year()inwhere子句:

where year(HireDate) >= 2006 and year(HireDate) <= 2008 

此外,您也不需要使用cast()函数,year()因为它会返回数字类型。

您的SELECT陈述对我来说很奇怪,当您包括以下内容时,它应该具有聚合列GROUP BY

SELECT YEAR(HireDate), DepartmentName,
       count(ParentEmployeeKey) AS 'total emplyee join' 
FROM DimEmployee 
WHERE year(HireDate) >= 2006 and year(HireDate) <= 2008 
GROUP BY DepartmentName, YEAR(HireDate), FirstName, ParentEmployeeKey
ORDER BY YEAR(HireDate);

推荐阅读