SQL查询在x年y月加入但未给出所需结果的员工

SQL查询在x年y月加入但未给出所需结果的员工,sql,sql-server,Sql,Sql Server,质疑 列出1992年加入的EMP 员工表 查询代码 结果 我得到的结果是空的。从1992年开始的年份如何获得结果 找到1992年5月雇佣的员工的方法也一样 Select * from employees where HireDate like '1992-05%' 结果为空且无列您只需更改所查询数据的日期格式,即可获得年份 我们可以使用DATEPARTYY来实现这一点 像这样 DATEPART(YY,hiredate) 此外,您还需要使用替换LIKE以获得精确匹配系统= 因此,您的结束脚本应

质疑

列出1992年加入的EMP

员工表

查询代码

结果 我得到的结果是空的。从1992年开始的年份如何获得结果

找到1992年5月雇佣的员工的方法也一样

Select * from employees where HireDate like '1992-05%'

结果为空且无列

您只需更改所查询数据的日期格式,即可获得年份

我们可以使用DATEPARTYY来实现这一点

像这样

DATEPART(YY,hiredate)
此外,您还需要使用替换LIKE以获得精确匹配系统=

因此,您的结束脚本应该是

SELECT 
* 
FROM employees 
WHERE DATEPART(YY,hiredate) = ('1992')
虽然转换为varchar看起来是一个简单的解决方案,但它的性能将不会是最佳的,因为一旦开始转换列,即在where子句中使用时,将无法使用它的not-sargable索引

使用窗口比较消除了对函数的需要,并且执行得更好,如下所示:

-- Find all employees hired in 2020
SELECT * 
FROM dbo.Employees 
WHERE Hiredate >= '01 Jan 2020' and HireDate < '01 Jan 2021'

-- Find all employees hired in May 2020
SELECT * 
FROM dbo.Employees 
WHERE Hiredate >= '01 May 2020' and HireDate < '01 Jun 2020'
LIKE是一个字符串函数。但您的列可能是某种日期/时间值。使用比较(使用标准日期/时间格式)要好得多。关于你的问题:

where HireDate >= '1992-01-01' and HireDate < '1993-01-01'
或:


连字符表单使用ISO标准日期格式,这种格式在SQL Server中的大多数情况下都有效。SQL Server中有一个国际化设置不起作用。第二个使用SQL Server的内部标准日期,该日期在任何情况下都有效。

提示:datepartyear、date\u col或year。不要将日期视为字符串。请阅读我的问题,我只需要year和year Month。您的原始查询是错误的:Fuller是1992年雇佣的
SELECT 
* 
FROM employees 
WHERE DATEPART(YY,hiredate) = ('1992')
-- Find all employees hired in 2020
SELECT * 
FROM dbo.Employees 
WHERE Hiredate >= '01 Jan 2020' and HireDate < '01 Jan 2021'

-- Find all employees hired in May 2020
SELECT * 
FROM dbo.Employees 
WHERE Hiredate >= '01 May 2020' and HireDate < '01 Jun 2020'
where HireDate >= '1992-01-01' and HireDate < '1993-01-01'
where HireDate >= '19920101' and HireDate < '19930101'