私の目標は、現在の日付より3年以上前にHireDateを見つけることですが、私は構文について混乱しています。相続問題GETDATE WITH DATEDIFFを使用していますか?
IF DATEDIFF(year,HireDate,GETDATE) > 3
私の目標は、現在の日付より3年以上前にHireDateを見つけることですが、私は構文について混乱しています。相続問題GETDATE WITH DATEDIFFを使用していますか?
IF DATEDIFF(year,HireDate,GETDATE) > 3
DATEDIFF()
を使用しないでください! DATEADD()
を使用します。
where HireDate < dateadd(year, -3, GETDATE())
DATEDIFF()
は、あなたはそれがないと思う何をしません。 2つの日付間の年の境界の数を数えます。したがって、1月1日と2016年12月31日の差は1年です。
さらに、DATEDIFF()
では、この列は関数の引数です。これにより、SQL Serverは列のインデックスを使用できなくなります。引数がGETDATE()
であり、表の列ではないため、これはDATEADD()
の問題ではありません。
試してみてください。
SELECT HireDate from table_name
WHERE DATEDIFF(Year, HireDate, GETDATE()) > 3
if DATEADD(year,3,HireDate)<GETDATE()
HireDateのインデックスがある場合には、その代わりに、より良い方法は、HireDate
このクエリを試して問題を解決してください。
SELECT HIREDATE TableNameに FROM WHERE `GETDATE`ためのDateDiff関数(年、HIREDATE、GETDATE())> = 3
使用括弧:' DATEDIFF(年、HIREDATE、GETDATE()) ' –
はい、そのウォンDATEDIFF(YEAR、 '20161231'、 '20170101')は1の答えを返します。MONTHを使用して12で割ったほうがよいでしょう。DAY –
ゴードンの答えを読んで.... – scsimon