qq_32224861
June君
采纳率31.3%
2017-05-23 07:09 阅读 2.4k

mysql 根据条件查询数据

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • qq_37739083 qq_37739083 2017-05-23 07:23

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

    点赞 1 评论 复制链接分享
  • zhumengstyle zhumengstyle 2017-05-23 08:27
    根据你的需求,创建数据如下:![图片说明](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';
    
    点赞 1 评论 复制链接分享
  • xuanzhangran 转角人生 2017-05-23 07:15

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

    点赞 评论 复制链接分享
  • a314066646 FEN_TA 2017-05-23 07:16

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

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

    点赞 评论 复制链接分享
  • xuanzhangran 转角人生 2017-05-23 07:16

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

    点赞 评论 复制链接分享
  • qq_32224861 June君 2017-05-23 07:28

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

    点赞 评论 复制链接分享
  • qq_34313263 朝闻道夕拾花 2017-05-23 08:23

    涉及到时间查询,最准确最稳妥的做法是使用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,'',''),精确到分;

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

    点赞 评论 复制链接分享

相关推荐