2017-03-24 5 views
1

私の目標は、現在の日付より3年以上前にHireDateを見つけることですが、私は構文について混乱しています。相続問題GETDATE WITH DATEDIFFを使用していますか?

IF DATEDIFF(year,HireDate,GETDATE) > 3 
+2

使用括弧:' DATEDIFF(年、HIREDATE、GETDATE()) ' –

+4

はい、そのウォンDATEDIFF(YEAR、 '20161231'、 '20170101')は1の答えを返します。MONTHを使用して12で割ったほうがよいでしょう。DAY –

+0

ゴードンの答えを読んで.... – scsimon

答えて

6

DATEDIFF()を使用しないでください! DATEADD()を使用します。

where HireDate < dateadd(year, -3, GETDATE()) 

DATEDIFF()は、あなたはそれがないと思う何をしません。 2つの日付間の年の境界の数を数えます。したがって、1月1日と2016年12月31日の差は1年です。

さらに、DATEDIFF()では、この列は関数の引数です。これにより、SQL Serverは列のインデックスを使用できなくなります。引数がGETDATE()であり、表の列ではないため、これはDATEADD()の問題ではありません。

1

試してみてください。

SELECT HireDate from table_name 
WHERE DATEDIFF(Year, HireDate, GETDATE()) > 3 
4
if DATEADD(year,3,HireDate)<GETDATE() 
+0

HireDateのインデックスがある場合には、その代わりに、より良い方法は、HireDate

1

このクエリを試して問題を解決してください。

SELECT HIREDATE TableNameに FROM WHERE `GETDATE`ためのDateDiff関数(年、HIREDATE、GETDATE())> = 3

関連する問題