要求能根据当前时间和数据库中的出生日期(####-##-##)计算年龄。其实我要实现这样的功能:
我要实现年龄范围搜索,已知一个年龄范围,AgeBegin 和 AgeEnd,比如18岁至25岁。
而我一张表中有一列身份证号,我要先实现身份证号转成出生日期,然后通过满足条件“AgeBegin<=(系统时间-出生日期)>=AgeEnd进行查询。
我要实现年龄范围搜索,已知一个年龄范围,AgeBegin 和 AgeEnd,比如18岁至25岁。
而我一张表中有一列身份证号,我要先实现身份证号转成出生日期,然后通过满足条件“AgeBegin<=(系统时间-出生日期)>=AgeEnd进行查询。
FROM tab1
WHERE (((Date()-DateSerial(CLng(Mid([m],7,2)),CLng(Mid([m],9,2)),CLng(Mid([m],11,2)))) Between 10*365 And 50*365))
Date相减是天数,
Dim sYear As Integer '出生日期的年代
Dim dYear As Integer '当前日期的年代
Dim sDays As Integer '出生日期的天数
Dim dDays As Integer '当前日期的天数
Dim jhDays As Integer '出生天数
Dim miAge As Integer '年龄
......
'获得出生日期和当前日期的年代
sYear = DatePart("yyyy", rs!出生日期)
dYear = DatePart("yyyy", DTPicker1.Value) 'DTPicker1是日历控件
'获得出生日期和当前日期的天数
sDays = DatePart("y", rs!出生日期)
dDays = DatePart("y", DTPicker1.Value)
'计算出生天数
If sYear = dYear Then
If sDays = dDays Then '同年同日
jhDays = 1
Else
jhDays = dDays - sDays '同年不同日
End If
Else
jhDays = (dYear - sYear - 1) * 365 + (365 - sDays) + dDays '不同年
End If
'计算年龄
miAge=jhDays/365
if miAge>=1 then
......
datediff(yy,birthdate,getdate()) as 年龄 ,
case len(identitycard) when 15 then datediff(yy,cast(substring(identitycard,7,6) as smalldatetime),getdate())
when 18 then datediff(yy,cast(substring(identitycard,9,6) as smalldatetime),getdate())
else null end as 年龄
from employees
datediff(yy,DATE1,DATE2) 取得年的间隔.
MM 日 DY天
from employees
where (case len(identitycard) when 15 then datediff(yy,cast(substring(identitycard,7,6) as smalldatetime),getdate())
when 18 then datediff(yy,cast(substring(identitycard,9,6) as smalldatetime),getdate())
else '0' end )>21
and (case len(identitycard) when 15 then datediff(yy,cast(substring(identitycard,7,6) as smalldatetime),getdate())
when 18 then datediff(yy,cast(substring(identitycard,9,6) as smalldatetime),getdate())
else '0' end )<25
其实你应该多设置一个字段存出生日期(birthdate)的,数据如'19790405'
,这样的话判断起来特别的简单,如:
setsql="select * from employees
where datediff(yy,birthdate,getdate())>'" & AgeBegin &"'" _
& " and datediff(yy,birthdate,getdate())<'" & AgeEnd &"'"