主题:跳过不合法的日期——身份证提取年月日
birthday是日期型,idcd是字符型,是身份证号码,问题是身份证号码不都是正确的。用下面语句时会出错,提示“函数参数的值、类型或数目无效”。原因是身份证号码错了,导致年月日不合法,比如有个错误的18位身份证号码440721964030660220,正确日期应是1964.03.06。但由于是错的,函数得出的是9640-30-66,显然是非法的。我想遇到这种非法的日期就跳过不处理,直接处理下一个。数据已导入表中了,有30多万条记录。怎样跳过不合法的呢,即不合法的不处理,直到处理完所有的其它的。
SET DATE ANSI
SET CENTURY on
REPLACE birthday with DATE(VAL('19'+SUBSTR(idcd,7,2)),VAL(SUBSTR(idcd,9,2)),VAL(SUBSTR(idcd,11,2))) for LEN(alltrim(idcd))=15
或REPLACE birthday with DATE(VAL(SUBSTR(idcd,7,4)),VAL(SUBSTR(idcd,11,2)),VAL(SUBSTR(idcd,13,2))) for LEN(alltrim((idcd))=18