高分 sql语句,求两个日期之间的数据~~

问题:我想实现生日查询,如1月1日到5月5日之间过生日的人。1.这种月份间的查询,在数据库中应该如何让设置字段,是年月日都要有,还是只需要日月就可以了。2.数据库的字段应... 问题:我想实现生日查询,如1月1日到5月5日之间过生日的人。
1.这种月份间的查询,在数据库中应该如何让设置字段,是年月日都要有,还是只需要日月就可以了。
2.数据库的字段应该用什么类型,以什么格式存放比较好。
3.这种查询语句应该怎么写。

在网上看了很多种方法,没有我需要的,期待高人指教。
啊,不好意思,sqlserver2005,谢谢

注意一下啊,不光是1月1日至5月5日之间,还有加入是9月1日至3月1日之间这种的,请高手帮帮忙。

tj_angela的可以实现,谢谢,能不能吧把另一半也实现了,不胜感激。

这是答案 帮助后来人。。
select * from tablename where
substring(CONVERT(varchar(12),date型日期字段,112),5,4) <= '0331' or substring(CONVERT(varchar(12),date型日期字段,112),5,4) >='0501'
展开
 我来答
糜若雁仁钧
2019-03-29 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:30%
帮助的人:955万
展开全部
我常用informix数据库,应该和sqlserver差别不大,月日即可,我用日期时一般就是varchar,月日之间用符号分隔,一般都用‘-’
比如你的是person表,字段有'人'
varchar(10),'生日'
varchar(5)
张三
01-02
李四
05-04
王五
06-01
select
人,生日
from
person
where
'01-01'<=生日
and
生日<='05-05'
直接大于小于就行了,不会有遗漏的。
附:
在informix中可以实现直接日期想减,
to_date('2008-10-10','%Y-%m-%d')-to_date('2008-09-27','%Y-%m-%d')
就行了,在sql中不知道可不可以,你再查下。
tj_angela
2009-04-07 · TA获得超过7530个赞
知道大有可为答主
回答量:6797
采纳率:75%
帮助的人:2596万
展开全部
select *
from tablename
where
substring(CONVERT(varchar(12),这里是你的date型日期字段,112),5,4) between '0101' and '0505'
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
慎南琴tT
2009-04-07 · TA获得超过257个赞
知道小有建树答主
回答量:596
采纳率:0%
帮助的人:390万
展开全部
不考虑年份的话就得考虑对生日的月和日做变换,以sqlserver2000为例

select * from person where (Month(birthday) * 100 + Day(birthday)) >= 101 and (Month(birthday) * 100 + Day(birthday)) <= 505

其中(Month(birthday) * 100 + Day(birthday))就是将日期型的生日字段转换成了一个整型再进行比较。其他数据库也有类似的取年月日的函数。

数据库字段我是习惯使用日期型,但做上面这种查询的时候效率可能会低一点。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lcht1986
2009-04-07 · 超过21用户采纳过TA的回答
知道答主
回答量:109
采纳率:0%
帮助的人:65.5万
展开全部
我常用informix数据库,应该和sqlserver差别不大,月日即可,我用日期时一般就是varchar,月日之间用符号分隔,一般都用‘-’
比如你的是person表,字段有'人' varchar(10),'生日' varchar(5)
张三 01-02
李四 05-04
王五 06-01

select 人,生日 from person
where '01-01'<=生日 and 生日<='05-05'
直接大于小于就行了,不会有遗漏的。

附:
在informix中可以实现直接日期想减,
to_date('2008-10-10','%Y-%m-%d')-to_date('2008-09-27','%Y-%m-%d')
就行了,在sql中不知道可不可以,你再查下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
intehel
2009-04-07 · TA获得超过1293个赞
知道大有可为答主
回答量:1601
采纳率:100%
帮助的人:1776万
展开全部
最简单的方法就是用char(4)来保存生日。
select student_name
from students
where student_birthday between '0101' and '0505'
order by student_birthday

也可以用数值型:)
select student_name
from students
where student_birthday between 101 and 505
order by student_birthday

当然也可以用日期型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式