| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3071 人关注过本帖
标题:varchar取值
只看楼主 加入收藏
cx62202
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-6-17
收藏
 问题点数:0 回复次数:7 
varchar取值
数据库表:table   字段:nl    字段里的值有: '14岁','13岁','19岁','33岁','11月','12月','1岁','21岁','28岁'
规定小于等于14岁的为儿童。
请问如何取出 儿童 数据?
谢谢!!!
搜索更多相关主题的帖子: 数据库表 儿童 如何 
2016-06-17 07:02
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11773
专家分:43421
注 册:2006-5-13
收藏
得分:0 
字段设计的缺陷。如果保存出生日期,就可以很方便地进行各种处理。象楼主这样,岂不是每月要定期更新nl字段中的月份数、每年要定期更新nl字段中的岁数,如果漏更新或者重复更新岂不乱套了。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2016-06-17 07:49
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用hu9jj在2016-6-17 07:49:48的发言:

字段设计的缺陷。如果保存出生日期,就可以很方便地进行各种处理。象楼主这样,岂不是每月要定期更新nl字段中的月份数、每年要定期更新nl字段中的岁数,如果漏更新或者重复更新岂不乱套了。

楼上的说的对,一般只存出生日期,利用计算年龄时的当时日期,就可以计算出他的年龄。
如:datediff(yyyy,日期字段,getdate())就能计算出年龄,但这个好像只是年份相减的。


[此贴子已经被作者于2016-6-17 11:20编辑过]

2016-06-17 09:06
cx62202
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-6-17
收藏
得分:0 
回复 2楼 hu9jj
是的~~~但是表已经被该公司做好了   也用了很多年了
2016-06-17 14:57
cx62202
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-6-17
收藏
得分:0 
回复 3楼 mywisdom88
现在我就想知道这个能取到么?
2016-06-17 14:58
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:0 
你表的字段叫: NL
对应的值
14岁
13岁
19岁
33岁
...
有无身份证字段或者是录入日期
如果有身份证字段,要根据身份证号码重新计算年龄,才是真实的,
如果不在乎是否真实年龄,可以这样查,但NL格式一定要 XX岁
create table #tmp(xm varchar(10),nl varchar(10))
insert into #tmp(xm,nl) values('张三1','12岁')
insert into #tmp(xm,nl) values('张三2','20岁')
insert into #tmp(xm,nl) values('张三3','13岁')
insert into #tmp(xm,nl) values('张三4','24岁')
insert into #tmp(xm,nl) values('张三5','14岁')
insert into #tmp(xm,nl) values('张三6','22岁')
insert into #tmp(xm,nl) values('张三7','02岁')
insert into #tmp(xm,nl) values('张三8','2')   --格式错误
insert into #tmp(xm,nl) values('张三9','岁2') --格式错误
insert into #tmp(xm,nl) values('张三10','56') --格式错误

select * from #tmp where cast(substring(nl,1,(case when charindex('岁',nl)>0 then charindex('岁',nl)-1 else 0 end)) as int)<=14
2016-06-17 15:55
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-06-17 16:02
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:0 
--drop table #tmp
--go
--create table #tmp(id int,xm varchar(10),nl varchar(10),sfz varchar(19),csrq datetime)
--insert into #tmp(id,xm,nl,sfz,csrq) values(3,'张三','','440106197805015047','1978-05-01')
--insert into #tmp(id,xm,nl,sfz,csrq) values(4,'李四','','440106198005045047','1980-05-04')
--insert into #tmp(id,xm,nl,sfz,csrq) values(5,'王五','','','1980-05-04')
--insert into #tmp(id,xm,nl,sfz,csrq) values(6,'赵六','','440106200008102451',null)
--insert into #tmp(id,xm,nl,sfz,csrq) values(7,'刘七','','440106200008102451','')

select * from #tmp

--身份证为字符串,年龄为字符串,出生日期为日期
--利于身份证来计算年龄
select id,xm,
cast(datediff(yyyy,cast((case when len(sfz)>=15 then substring(sfz,7,4)+'-'+ substring(sfz,11,2)+'-'+substring(sfz,13,2) else null end) as datetime),getdate()) as varchar)+'岁' as nl,
csrq from #tmp

--出生日期来计算年龄
select id,xm,
cast(datediff(yyyy,case when year(csrq)<=1900 then null else csrq end,getdate()) as varchar)+'岁' as nl,
csrq from #tmp

图片附件: 游客没有浏览图片的权限,请 登录注册
2016-06-17 17:46
快速回复:varchar取值
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023973 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved