ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » MS SQL Server » 询问一个简单的SQL语句写法

标题: [笔记] 询问一个简单的SQL语句写法
离线 reloadsoft



精华贴数 0
个人空间 0
技术积分 14 (72843)
社区积分 0 (1813115)
注册日期 2008-7-3
论坛徽章:0
      
      

发表于 2008-7-3 17:09 
询问一个简单的SQL语句写法

请问如何通过身份证查询到年龄,包括年龄的具体范围: 如 我要查询10-20岁之间的年龄的有多少条数据?
一定要用身份证查询


只看该作者    顶部
离线 smthgdin
老会员



精华贴数 0
个人空间 0
技术积分 1395 (1212)
社区积分 1 (35168)
注册日期 2004-5-13
论坛徽章:2
ITPUB元老开发板块每日发贴之星    
      

发表于 2008-7-3 18:08 
既然用身份证就没必要范围,身份证唯一的。 查的德结果唯一。


__________________
www.kooboy.net
只看该作者    顶部
离线 reloadsoft



精华贴数 0
个人空间 0
技术积分 14 (72843)
社区积分 0 (1813115)
注册日期 2008-7-3
论坛徽章:0
      
      

发表于 2008-7-3 18:12 
回复 #2 smthgdin 的帖子

就因为是身份证是唯一的所以才要通过身份证查询年龄,你么明白我意思,我意思是用身份证字段通过SQL查询年龄范围,比如我一张表要查询10-20岁的人怎么查?


只看该作者    顶部
离线 smthgdin
老会员



精华贴数 0
个人空间 0
技术积分 1395 (1212)
社区积分 1 (35168)
注册日期 2004-5-13
论坛徽章:2
ITPUB元老开发板块每日发贴之星    
      

发表于 2008-7-3 18:25 
你表里面没有年龄字段?
要用匹配身份证上的出生年月?


__________________
www.kooboy.net
只看该作者    顶部
离线 cosio
资深会员



精华贴数 0
个人空间 0
技术积分 1593 (1059)
社区积分 44 (5197)
注册日期 2004-8-8
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-7-3 23:28 
写个让你参考一下!

数据:
-------------------------------------
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


_____________________________

[ 本帖最后由 cosio 于 2008-7-3 23:31 编辑 ]


__________________
QQ:75558288
__________________
MSN:fenny_8@hotmail.com
__________________
Web:http://cosio.itpub.net
只看该作者    顶部
离线 reloadsoft



精华贴数 0
个人空间 0
技术积分 14 (72843)
社区积分 0 (1813115)
注册日期 2008-7-3
论坛徽章:0
      
      

发表于 2008-7-4 13:03 
回复 #4 smthgdin 的帖子

有年龄字段我就直接where age between 10 to 20了,还用身份证怎么复杂额。。。。。


只看该作者    顶部
离线 smthgdin
老会员



精华贴数 0
个人空间 0
技术积分 1395 (1212)
社区积分 1 (35168)
注册日期 2004-5-13
论坛徽章:2
ITPUB元老开发板块每日发贴之星    
      

发表于 2008-7-4 13:13 
糟糕的表设计~~~~~
可以截取,但是这样写出来的sql执行效率不高。


__________________
www.kooboy.net
只看该作者    顶部
离线 reloadsoft



精华贴数 0
个人空间 0
技术积分 14 (72843)
社区积分 0 (1813115)
注册日期 2008-7-3
论坛徽章:0
      
      

发表于 2008-7-4 13:46 
回复 #5 cosio 的帖子

感觉很复杂,我记得以前我在学校写过这代码,不过肯定么那么复杂的,我在想想看,谢谢哦~~~~~~~~


只看该作者    顶部
离线 reloadsoft



精华贴数 0
个人空间 0
技术积分 14 (72843)
社区积分 0 (1813115)
注册日期 2008-7-3
论坛徽章:0
      
      

发表于 2008-7-4 14:41 
回复 #8 reloadsoft 的帖子

后来我做出来的一个:
select 身份证号 from 表 where substring(身份证号,7,8) > '19920101' and substring(身份证号,7,8)<'19980101'  
就能推出年龄在16-20岁之间的身份证号,这样应该更简单把


只看该作者    顶部
离线 smthgdin
老会员



精华贴数 0
个人空间 0
技术积分 1395 (1212)
社区积分 1 (35168)
注册日期 2004-5-13
论坛徽章:2
ITPUB元老开发板块每日发贴之星    
      

发表于 2008-7-4 15:42 
cosio 是给你个例子参考。思路类似的都是要截取字符串来比较。
我说过了,你那个写法可以,但是可能会牺牲性能,比如身份证本身就是索引的话,你那样写法索引用不到。


__________________
www.kooboy.net
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问