2016-06-27 11 views
-1

特定の日付範囲をクエリする方法はわかっていますが、特定の期間はクエリできません。特定の期間のクエリ(Sqlアクセス)

誰かがx日付からy日付まで雇用されていたレコードを探すのではなく、私は5年間雇用されていた記録を探しています。ファンキーなのですが、誰にもこれについての洞察はありますか?

+1

サンプルデータと望ましい結果は、あなたがしたいことを説明するのに役立ちます。 –

+0

開始日にX秒/ミリ秒を追加できませんか?ほとんどの日付は、小さな時間単位を表す数値として保存されます(秒単位とミリ秒単位が最も一般的です)。 – ARandomFurry

+2

さて、あなたは彼らが始めた時を知っていて、もしあなたがまだ雇用されていれば今日のことを知っています。だから、あなたはそれの間の経過時間を把握し、それが5年以上かどうかを判断します。それは単一の[DateDiff](http://www.techonthenet.com/access/functions/date/datediff.php)であり、何年にもわたって結果を得ることができます。閏年など。 – Dresden

答えて

-1

あなたはこのようDateAdd関数を使用するカスタム機能を必要とするので、ちょうど、暦年で差を返します

WHERE DATEDIFF (yy, startdate , enddate) = 5 
+0

これは暦年の差を返します。 – Gustav

3

DateDiff関数DATEDIFF関数を使用します。

Public Function AgeSimple(_ 
    ByVal datDateOfBirth As Date) _ 
    As Integer 

' Returns the difference in full years from datDateOfBirth to current date. 
' 
' Calculates correctly for: 
' leap years 
' dates of 29. February 
' date/time values with embedded time values 
' 
' DateAdd() is used for check for month end of February as it correctly 
' returns Feb. 28. when adding a count of years to dates of Feb. 29. 
' when the resulting year is a common year. 
' After an idea of Markus G. Fischer. 
' 
' 2007-06-26. Cactus Data ApS, CPH. 

    Dim datToday As Date 
    Dim intAge As Integer 
    Dim intYears As Integer 

    datToday = Date 
    ' Find difference in calendar years. 
    intYears = DateDiff("yyyy", datDateOfBirth, datToday) 
    If intYears > 0 Then 
    ' Decrease by 1 if current date is earlier than birthday of current year 
    ' using DateDiff to ignore a time portion of datDateOfBirth. 
    intAge = intYears - Abs(DateDiff("d", datToday, DateAdd("yyyy", intYears, datDateOfBirth)) > 0) 
    End If 

    AgeSimple = intAge 

End Function 

その後のようなSQLを使用:

Select * 
From PersonTable 
Where AgeSimple([EmploymentDate]) = 5 

Mr. Monkeyの場合:

完全に説明するインラインコメントに注意してください。たとえば:

' Decrease by 1 if current date is earlier than birthday of current year 

は、この目的を果たすために、コードの3「とても複雑」行が追加されます。

EmploymentDate = #2001/5/1# 
Employed = DateDiff("yyyy", EmploymentDate, Date) ' -> 15 years 
Employed = AgeSimple(EmploymentDate)    ' -> 15 years 

EmploymentDate = #2002/11/15# 
Employed = DateDiff("yyyy", EmploymentDate, Date) ' -> 14 years 
Employed = AgeSimple(EmploymentDate)    ' -> 13 years 

If intYears > 0 Then 
    intAge = intYears - Abs(DateDiff("d", datToday, DateAdd("yyyy", intYears, datDateOfBirth)) > 0) 
End If 

は、これらの必要性を説明するために、これらの2つの例をご検討ください

+0

これはちょうど私にひどく畳み込まれたDATEDIFFのように見える – Spasticmonkey

+1

私は本当にあなたの冗談を願っています。しかし、私は目的をはっきりさせるべき解答に拡張された説明を加えました。ダウンボートを勉強し、アップボートに変更してください。 – Gustav

+0

追加情報とサンプルの出力をありがとう、私はあなたがこのコードで達成していることを知っている、私の投票+1を変更しました – Spasticmonkey

関連する問題