要在SQL数据库中根据身份证号码查询出性别(有15位的,也有18位的),怎么写代码?

lucylylove 2010-03-25 02:45:43
要在SQL数据库中根据身份证号码查询出性别(有15位的,也有18位的),怎么写代码?
...全文
2525 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2010-03-26
  • 打赏
  • 举报
回复
declare @t table(col varchar(18))
insert @t select '320113197611263611'
insert @t select '320113761126361'
insert @t select '320113761126368'


select col
,case len(col) when 15 then
case cast(right(col,1) as int)%2 when 1 then '男' else '女' end
when 18 then
case cast(substring(col,17,1) as int)%2 when 1 then '男' else '女' end
else '错误' end as 'sexy'
from @t
/*col sexy
------------------ ----
320113197611263611 男
320113761126361 男
320113761126368 女

(3 行受影响)
*/
lucylylove 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cailee 的回复:]
SQL code
declare @t table(col varchar(18))
insert @t select '320113197611263611'
insert @t select '320113761126361'
insert @t select '320113761126368'


select col
,case len(col) when ……
[/Quote]


服务器: 消息 245,级别 16,状态 1,行 1
将 varchar 值 'D' 转换为数据类型为 int 的列时发生语法错误。
怎么解决?
cailee 2010-03-25
  • 打赏
  • 举报
回复
declare @t table(col varchar(18))
insert @t select '320113197611263611'
insert @t select '320113761126361'
insert @t select '320113761126368'


select col
,case len(col) when 15 then
case cast(right(col,1) as int)%2 when 1 then '男' else '女' end
when 18 then
case cast(substring(col,17,1) as int)%2 when 1 then '男' else '女' end
else '错误' end as 'sexy'
from @t
cailee 2010-03-25
  • 打赏
  • 举报
回复
15位的最后一位,18位的倒数第二位是奇数的是男的,否则就是女的。
lucylylove 2010-03-25
  • 打赏
  • 举报
回复
Col001 Col002 Col003 Col004 Col005
姓名 电话 地址 身份证名称 身份证号码
张三 XXX XXX 居民身份证 320113197611263611
李四 XXX XXX XXXXXX .................
.... .... ..... ..... ................
..........................................................
..........................................................
..........................................................


跪求查询性别语法!!
  • 打赏
  • 举报
回复
主要验证SQL数据库中已输入的15位 及18位 身份证号码的位数、出生年月日是否正确,
可以过滤出大部分的输入错误。

or (len(身份证号)=18 and (Substring(身份证号,7,2)<'19' or Substring(身份证号,7,2)>'20'
or (Substring(身份证号,11,2)>12)
or (Substring(身份证号,11,2) in (01,03,05,07,08,10,12) and Substring(身份证号,13,2)>31)
or (Substring(身份证号,11,2) in (04,06,09,11) and Substring(身份证号,13,2)>30)
or (Substring(身份证号,11,2)=02 and Substring(身份证号,13,2)>29)))




---------------------- 下面是针对 15位 及18位 身份证号码性别的验证语句 ------------------

-- Access 不支持 Substring 查询,可以替换为 mid 查询。

select 序号,姓名,身份证号,性别
from 身份表
where (((len(身份证号)=15) and (Substring(身份证号,15,1) in (1,3,5,7,9)) and 性别<>'男')
or ((len(身份证号)=15) and (Substring(身份证号,15,1) in (2,4,6,8,0)) and 性别<>'女'))

or (((len(身份证号)=18) and (Substring(身份证号,17,1) in (1,3,5,7,9)) and 性别<>'男')
or ((len(身份证号)=18) and (Substring(身份证号,17,1) in (2,4,6,8,0)) and 性别<>'女'))

---------------------- 下面是针对 15位 及18位 身份证号码位数与出生年月日的验证 ------------------

-- Access 不支持 Substring 查询,可以替换为 mid 查询。

select 序号,姓名,身份证号,性别
from 身份表
where (len(身份证号)<>15 and len(身份证号)<>18)
or (len(身份证号)=15 and ((Substring(身份证号,9,2)>12)
or (Substring(身份证号,11,2) > 31)
or (Substring(身份证号,9,2) in (01,03,05,07,08,10,12) and Substring(身份证号,11,2)>31)
or (Substring(身份证号,9,2) in (04,06,09,11) and Substring(身份证号,11,2)>30)
or (Substring(身份证号,9,2)=02 and Substring(身份证号,11,2)>29)))


Stone19840824 2010-03-25
  • 打赏
  • 举报
回复
好像新的身份证不能这样查吧
lucylylove 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ldslove 的回复:]
SQL code
select case when (len(身份证号码)=18 and cast(substring(身份证号码,17,1) as int)%2=1)
or( len(身份证号码)=15 and cast(right(身份证号码,1) as int)%2=1 then '男'
else '女' end as 性别
……
[/Quote]

服务器: 消息 156,级别 15,状态 1,行 2
在关键字 'then' 附近有语法错误。
这是为什么??
lucylylove 2010-03-25
  • 打赏
  • 举报
回复
select * from 表名 where (((len(Col005)=15) and (Substring(Col005,15,1) in (1,3,5,7,9)) and 性别 <>'男')
or ((len(Col005)=15) and (Substring(Col005,15,1) in (2,4,6,8,0)) and 性别<>'女'))
or (((len(Col005)=18) and (Substring(Col005,17,1) in (1,3,5,7,9)) and 性别<>'男')
or ((len(Col005)=18) and (Substring(Col005,17,1) in (2,4,6,8,0)) and 性别<>'女'))



服务器: 消息 207,级别 16,状态 3,行 1
列名 '性别' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 '性别' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 '性别' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 '性别' 无效。

刚入手SQL 不是很清楚!能说细点吗?
--小F-- 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xys_777 的回复:]
SQL code


下面是针对 15位 及18位 身份证号码性别的验证语句


select 序号,姓名,身份证号,性别

from 身份表

where (((len(身份证号)=15) and (Substring(身份证号,15,1) in (1,3,5,7,9)) and 性别<>‘男‘)

or ((len(身份证号)=15) and (Substring(身份……
[/Quote]

东那个升 2010-03-25
  • 打赏
  • 举报
回复
select case when (len(身份证号码)=18 and cast(substring(身份证号码,17,1) as int)%2=1)
or( len(身份证号码)=15 and cast(right(身份证号码,1) as int)%2=1 then '男'
else '女' end as 性别

from tb
永生天地 2010-03-25
  • 打赏
  • 举报
回复


下面是针对 15位 及18位 身份证号码性别的验证语句


select 序号,姓名,身份证号,性别

from 身份表

where (((len(身份证号)=15) and (Substring(身份证号,15,1) in (1,3,5,7,9)) and 性别<>‘男‘)

or ((len(身份证号)=15) and (Substring(身份证号,15,1) in (2,4,6,8,0)) and 性别<>‘女‘))

or (((len(身份证号)=18) and (Substring(身份证号,17,1) in (1,3,5,7,9)) and 性别<>‘男‘)

or ((len(身份证号)=18) and (Substring(身份证号,17,1) in (2,4,6,8,0)) and 性别<>‘女‘))

上网查查

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧