mysql 根据条件查询数据

在用户表中,有一个生日字段 birth,现在的需求是根据传入的时间段参数,查询此时间段内过生日的用户列表,需要考虑跨年的情况

查这些时间段的数据不需要考虑这些吧,我一直使用这个,没有出错过:http://blog.csdn.net/xuanzhangran/article/details/54708246

select * from 用户 where brith >= starttime and birth <= endtime

birth和时间段参数的格式一致就好了

如果你的业务,确实需要对跨年,请参考这个链接:http://blog.csdn.net/xuanzhangran/article/details/55666878

不需要考虑什么跨不跨年,直接传进时间,一样的时间格式进行查询

生日的判断标准是 几月几号 , 如果传入的时间段是同一年 比如说 2017-05-23 到 2017-06-23 直接取出月日比较肯定没问题啊,但是如果跨年了,就不好控制了,比如 2017-05-23 到 2018-02-01 这个时间段的话,就应该去查 05-23到12-31过生日的 和 01-01到 02-01过生日的

涉及到时间查询,最准确最稳妥的做法是使用DATEDIFF函数,如
StringBuilder sb = new StringBuilder();
sb.Append(" SELECT * FROM USERINFO WHERE 1=1");
sb.Append(" AND DATEDIFF(DAY,'{0}',birth)>=0", startTime);
sb.Append(" AND DATEDIFF(DAY,'{0}',birth)< 0", endTime);

其中,DATEDIFF函数最前边一个参数
DATEDIFF(YEAR,'',''),精确到年;
DATEDIFF(MONTH,'',''),精确到月;
DATEDIFF(DAY,'',''),精确到日;
DATEDIFF(HUOR,'',''),精确到小时;
DATEDIFF(MINUTE,'',''),精确到分;

等等,可以根据具体情况使用,你这个情况应该精确到日就可以了

根据你的需求,创建数据如下:![图片说明](https://img-ask.csdn.net/upload/201705/23/1495527838_271628.jpg)
有两个分支:
先判断传入的时间段参数前后大小关系,如果后者比前者时间大,则涉及跨年的问题,应该执行
select * from user where substring(birthday,6)>='09-01'   or   substring(birthday,6)<='06-01';
否则,执行
select * from user where substring(birthday,6)>='02-01'   and   substring(birthday,6)<='06-01';