以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  大神帮忙编一下在身份证号中提取出生日期的表达式  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=97997)

--  作者:机灵丫头
--  发布时间:2017/3/22 11:56:00
--  大神帮忙编一下在身份证号中提取出生日期的表达式
大神帮忙编一下在身份证号中提取出生日期的表达式,建立了一个表达式列为出生日期,数据表中有一列是身份证号,怎么样编写表达式才能让出生日期列自动生成出生日期呢?
--  作者:有点色
--  发布时间:2017/3/22 12:00:00
--  

DataColChanged事件

 

If e.DataCol.Name = "身份证号码" Then \'是身份证号码发生变化吗?
    If e.DataRow.IsNull("身份证号码") Then \'身份证号码是否为空
        e.DataRow("出生日期") = Nothing \'如果为空,则清除出生日期
    Else
        \'否则从身份证号码列中提取出生日期
        e.DataRow("出生日期") = ReadBirthday(e.DataRow("身份证号码"))
    End If
ElseIf e.DataCol.name = "出生日期" Then
    If e.newvalue <> Nothing Then
        Dim y As Integer = e.NewValue.year
        If format(e.newvalue, "MMdd") <= Format(Date.Today, "MMdd") Then
            e.DataRow("年龄") = Date.Today.Year - y
        Else
            e.DataRow("年龄") = Date.Today.Year - y -1
        End If
    Else
        e.DataRow("年龄") = Nothing
    End If
End If


--  作者:有点色
--  发布时间:2017/3/22 12:01:00
--  

 

http://www.foxtable.com/webhelp/scr/1445.htm

 


--  作者:机灵丫头
--  发布时间:2017/3/22 14:25:00
--  
为什么不是直接在表达式生成器中输入公式?
--  作者:有点色
--  发布时间:2017/3/22 14:51:00
--  
以下是引用机灵丫头在2017/3/22 14:25:00的发言:
为什么不是直接在表达式生成器中输入公式?

 

表达式不能进行复杂的运行,用代码才行。


--  作者:机灵丫头
--  发布时间:2017/3/22 14:59:00
--  
substring函数能不能实现?应该怎么编写?


--  作者:有点蓝
--  发布时间:2017/3/22 16:27:00
--  

试试

IIF(len([第三列]) = 18,Convert(SubString([第三列],7,4)+\'-\'+SubString([第三列],11,2)+\'-\'+SubString([第三列],13,2),\'System.DateTime\'),null)

 

不过没有办法校验是否正确的日期,如果身份证出错可能会导致其它的问题。建议还是使用代码处理,可以校验身份证的合法性