两个日期之间的 MS Access select?
MS Access select between two dates?
我已经搜索过了,但所有结果都没有帮助我理解。
我需要 select 18-23 岁的人的姓名。
所以我的尝试是:
WHERE ((People.Birth) Between (Now()-Year(18)) And (Now()-Year(23)))
我做错了什么? #some_date# 的解决方案是个坏主意!
终于通过简单的方式解决了
WHERE ((People.Birth) Between (Now()- 365*18) And (Now()-365*23))
如果您有更好的解决方案-欢迎
要获得真正的解决方案,您需要使用 DateAdd 和如下函数:
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
那么您的查询将包含此 where 子句:
WHERE AgeSimple(People.Birth) Between 18 And 23
我已经搜索过了,但所有结果都没有帮助我理解。
我需要 select 18-23 岁的人的姓名。 所以我的尝试是:
WHERE ((People.Birth) Between (Now()-Year(18)) And (Now()-Year(23)))
我做错了什么? #some_date# 的解决方案是个坏主意!
终于通过简单的方式解决了
WHERE ((People.Birth) Between (Now()- 365*18) And (Now()-365*23))
如果您有更好的解决方案-欢迎
要获得真正的解决方案,您需要使用 DateAdd 和如下函数:
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
那么您的查询将包含此 where 子句:
WHERE AgeSimple(People.Birth) Between 18 And 23