注册 登录
编程论坛 SQL Server论坛

varchar取值

cx62202 发布于 2016-06-17 07:02, 3333 次点击
数据库表:table   字段:nl    字段里的值有: '14岁','13岁','19岁','33岁','11月','12月','1岁','21岁','28岁'
规定小于等于14岁的为儿童。
请问如何取出 儿童 数据?
谢谢!!!
7 回复
#2
hu9jj2016-06-17 07:49
字段设计的缺陷。如果保存出生日期,就可以很方便地进行各种处理。象楼主这样,岂不是每月要定期更新nl字段中的月份数、每年要定期更新nl字段中的岁数,如果漏更新或者重复更新岂不乱套了。
#3
mywisdom882016-06-17 09:06
以下是引用hu9jj在2016-6-17 07:49:48的发言:

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

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


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

#4
cx622022016-06-17 14:57
回复 2楼 hu9jj
是的~~~但是表已经被该公司做好了   也用了很多年了
#5
cx622022016-06-17 14:58
回复 3楼 mywisdom88
现在我就想知道这个能取到么?
#6
mywisdom882016-06-17 15:55
你表的字段叫: 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
#7
mywisdom882016-06-17 16:02
只有本站会员才能查看附件,请 登录
#8
mywisdom882016-06-17 17:46
--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

只有本站会员才能查看附件,请 登录
1