
2008-7-3 17:09
reloadsoft
询问一个简单的SQL语句写法
请问如何通过身份证查询到年龄,包括年龄的具体范围: 如 我要查询10-20岁之间的年龄的有多少条数据?
一定要用身份证查询
2008-7-3 18:08
smthgdin
既然用身份证就没必要范围,身份证唯一的。 查的德结果唯一。
2008-7-3 18:12
reloadsoft
回复 #2 smthgdin 的帖子
就因为是身份证是唯一的所以才要通过身份证查询年龄,你么明白我意思,我意思是用身份证字段通过SQL查询年龄范围,比如我一张表要查询10-20岁的人怎么查?
2008-7-3 18:25
smthgdin
你表里面没有年龄字段?
要用匹配身份证上的出生年月?
2008-7-3 23:28
cosio
写个让你参考一下!
数据:
[color=Blue]-------------------------------------
1 350322199010106517
2 350322701010657
SQL: (oracle下)
---------------------
select case length(b02) when 18 then to_number(to_char(sysdate,'yyyy')) -to_number(substr(b02,7,4))
when 15 then to_number(to_char(sysdate,'yyyy')) -to_number('19'||substr(b02,7,2))
end from b
where (case length(b02) when 18 then to_number(to_char(sysdate,'yyyy')) -to_number(substr(b02,7,4))
when 15 then to_number(to_char(sysdate,'yyyy')) -to_number('19'||substr(b02,7,2))
end) between '10' and '20'
RESULT:
----------------
1 18[/color]
_____________________________
[[i] 本帖最后由 cosio 于 2008-7-3 23:31 编辑 [/i]]
2008-7-4 13:03
reloadsoft
回复 #4 smthgdin 的帖子
有年龄字段我就直接where age between 10 to 20了,还用身份证怎么复杂额。。。。。
2008-7-4 13:13
smthgdin
糟糕的表设计~~~~~
可以截取,但是这样写出来的sql执行效率不高。
2008-7-4 13:46
reloadsoft
回复 #5 cosio 的帖子
感觉很复杂,我记得以前我在学校写过这代码,不过肯定么那么复杂的,我在想想看,谢谢哦~~~~~~~~
2008-7-4 14:41
reloadsoft
回复 #8 reloadsoft 的帖子
后来我做出来的一个:
select 身份证号 from 表 where substring(身份证号,7,8) > '19920101' and substring(身份证号,7,8)<'19980101'
就能推出年龄在16-20岁之间的身份证号,这样应该更简单把
2008-7-4 15:42
smthgdin
cosio 是给你个例子参考。思路类似的都是要截取字符串来比较。
我说过了,你那个写法可以,但是可能会牺牲性能,比如身份证本身就是索引的话,你那样写法索引用不到。
2008-7-5 09:22
Ryan-liumin
我也想截取字符串来比较,可好复杂的 还是简单点好 一般用reloadsoft 的方法
2008-7-8 20:17
xiebinren
用出生日期吧
2008-7-9 10:10
沙漠孤鹰
select count(*) as 记录数
from 表
where (select case len(身份证号)
when 18 then datediff(year, substring(身份证号,7,4), getdate())
when 15 then datediff(year, '19'+substring(身份证号,7,2), getdate())
end as 年龄
between 10 and 20)
2008-7-11 23:01
zaorv
用截取方法实现,如SUBSTRING().
2008-7-11 23:03
zaorv
考虑上15位的身份证
2008-7-12 12:47
马鞍
用substr截取就可以比较了阿
页:
[1]

Powered by ITPUB论坛