2017-01-22 75 views
0

我有我的代码问题。我想显示每一个谁被录用的员工在1994年显示在1994年雇佣的每位员工的姓氏和雇用日期

我试着用这些代码来执行的LAST_NAMEHIRE_DATE但它不工作的结果是LAST_NAMEHIRE_DATE之间的空白。

这里是我的表,代码:

CREATE TABLE EMPLOYEES 
    ( 
    EMPLOYEE_ID INT, 
    FIRST_NAME VARCHAR(20), 
    LAST_NAME VARCHAR(25), 
    EMAIL VARCHAR(25), 
    PHONE_NUMBER VARCHAR(20), 
    HIRE_DATE DATETIME, 
    JOB_ID VARCHAR(10), 
    SALARY DECIMAL(8,2), 
    COMMISSION_PCT DECIMAL(2,2), 
    MANAGER_ID INT, 
    DEPARTMENT_ID INT 
    ); 


SELECT LAST_NAME, datepart(year,HIRE_DATE) FROM EMPLOYEES 
WHERE datediff (YEAR,HIRE_DATE,GETDATE) = 1994 

这里是我的表的图像: enter image description here

+0

你DATEDIFF功能,实际上,询问谁是1994年以前 –

回答

2

试试这个:

SELECT last_name, hire_date FROM employees 
WHERE year(hire_date) = 1994 

使用的功能,但是,将禁止查询优化器使用hire_date列上的任何索引。

所以,这应该更好的工作:

SELECT last_name, hire_date FROM employees 
WHERE hire_date >= '1994-01-01' and hire_date < '1995-01-01' 
+2

你永远不应该在这样的领域使用功能录用,这让在非SARGable。正确的方法是'hire_date> ='19940101'和hire_date <'19950101'' –

+0

@JamesZ你说得对。感谢您的评论。 – GurV

+0

@GurV谢谢。非常 。在使用> =从1994年开始执行,并把<确保它不会执行1995年所有1994 – Sharkweb