2017-01-22 2 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 

は、私のテーブルのイメージは次のようになります。しかし、意志、

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

機能の使用: enter image description here

+0

をごDATEDIFF関数は、あなたがそのような分野での機能を使用しないでください –

答えて

2

はこれを試してみてくださいクエリオプティマイザがhire_date列で使用可能なインデックスを使用するのを禁止します。

だから、これはより良い動作するはず:

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

1994年前に雇われた人を求め、実際には、ある、それは作ります非SARGableで。正しい方法は 'hire_date> = '19940101'とhire_date <'19950101''です。 –

+0

@JamesZあなたは正しいです。コメントありがとう。 – GurV

+0

@GurVありがとうございます。そんなに 。 >をすべての1994年から実行を開始するために使用することは、すべての1994年だけを実行しないことを確認することです。 – Sharkweb

関連する問題