要求能根据当前时间和数据库中的出生日期(####-##-##)计算年龄。其实我要实现这样的功能:
我要实现年龄范围搜索,已知一个年龄范围,AgeBegin 和 AgeEnd,比如18岁至25岁。
而我一张表中有一列身份证号,我要先实现身份证号转成出生日期,然后通过满足条件“AgeBegin<=(系统时间-出生日期)>=AgeEnd进行查询。

解决方案 »

  1.   

    SELECT tab1.m
    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相减是天数,
      

  2.   

    我的思路,请大家指正:Dim rs As New ADODB.Recordset
    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
    ......
      

  3.   

    --假设identitycard是身份证号(15位或者18位),必须是有效号码select  chinesename,identitycard,
    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
      

  4.   

    datediff  可以取得时间间隔
    datediff(yy,DATE1,DATE2) 取得年的间隔.
    MM 日 DY天
      

  5.   

    select *
    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 &"'"