食道癌患者忌吃什么:求SQL语句

来源:百度文库 编辑:高考问答 时间:2024/04/29 12:43:51
求SQL语句
目的:用出生年月日验证身份证号码是否正确

表名:jbqk
字段: 姓名:xm
身份证号:zh
年龄:nl (格式:1980-04-15)
18位身份证取从第7位开始的8个字符
找出不符合要求的条目的语句是

select *
from jbqk
where convert(varchar(8),年龄,112)<>substring(身份证号,7,8)

这条用于18位的号码可以,但下面这句用于15位的不行:

15位身份证取从第7位开始的6个字符
找出不符合要求的条目的语句是
select *
from jbqk
where convert(varchar(8),年龄,112)<>substring(身份证号,7,6)

15位身份证取从第7位开始的6个字符
找出不符合要求的条目的语句是
select *
from jbqk
where convert(varchar(8),年龄,112)<>substring(身份证号,7,6)

18位身份证取从第7位开始的8个字符
找出不符合要求的条目的语句是

select *
from jbqk
where convert(varchar(8),年龄,112)<>substring(身份证号,7,8)

这个我觉得是应该加一条参照完整性定义
建表的语句由于你给的信息不全 只能给出部分
还有就是建议把nl字段的类型改成整型
我这个方法利用的是整数操作
check zh%1e12=nl*1e4

DECLARE @zh nvarchar(20), @nl nvarchar(10)
SET @zh =(SELECT SUBSTRING(zh, 7, 8) FROM jbqk WHERE (xm = '名字'))
SET @nl =(SELECT REPLACE(nl, '-', '') FROM jbqk WHERE (xm = 'aaa'))
IF @zh = @nl PRINT '相等' ELSE PRINT '不相等'

很简单的
将身份证号和生日都读出来
然后比较生日这部分的是否相同

我的想法:先判断身份证位数 如果是18位 从输入的身份证号的第7取4判断年份是否合法,比如1900-2100,然后接着来月份和日期,15位的方法差不多