特定の日付範囲をクエリする方法はわかっていますが、特定の期間はクエリできません。特定の期間のクエリ(Sqlアクセス)
誰かがx日付からy日付まで雇用されていたレコードを探すのではなく、私は5年間雇用されていた記録を探しています。ファンキーなのですが、誰にもこれについての洞察はありますか?
特定の日付範囲をクエリする方法はわかっていますが、特定の期間はクエリできません。特定の期間のクエリ(Sqlアクセス)
誰かがx日付からy日付まで雇用されていたレコードを探すのではなく、私は5年間雇用されていた記録を探しています。ファンキーなのですが、誰にもこれについての洞察はありますか?
あなたはこのようDateAdd関数を使用するカスタム機能を必要とするので、ちょうど、暦年で差を返します
WHERE DATEDIFF (yy, startdate , enddate) = 5
これは暦年の差を返します。 – Gustav
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つの例をご検討ください
これはちょうど私にひどく畳み込まれたDATEDIFFのように見える – Spasticmonkey
私は本当にあなたの冗談を願っています。しかし、私は目的をはっきりさせるべき解答に拡張された説明を加えました。ダウンボートを勉強し、アップボートに変更してください。 – Gustav
追加情報とサンプルの出力をありがとう、私はあなたがこのコードで達成していることを知っている、私の投票+1を変更しました – Spasticmonkey
サンプルデータと望ましい結果は、あなたがしたいことを説明するのに役立ちます。 –
開始日にX秒/ミリ秒を追加できませんか?ほとんどの日付は、小さな時間単位を表す数値として保存されます(秒単位とミリ秒単位が最も一般的です)。 – ARandomFurry
さて、あなたは彼らが始めた時を知っていて、もしあなたがまだ雇用されていれば今日のことを知っています。だから、あなたはそれの間の経過時間を把握し、それが5年以上かどうかを判断します。それは単一の[DateDiff](http://www.techonthenet.com/access/functions/date/datediff.php)であり、何年にもわたって結果を得ることができます。閏年など。 – Dresden