字段baby_birthday类型 DATE (2000-02-25)查询条件:查询2月1日到3月20日之间的会员
如果只查询 SELECT `baby_birthday` FROM `user` WHERE month(`baby_birthday`) between 2 and 3  可以查询出2月到3月之间的朋友但是加上日期 SELECT `baby_birthday` FROM `user` WHERE month(`baby_birthday`) between 2 and 3  and DAYOFMONTH(`baby_birthday`) between 1 and 20  这样能查出结果但不准确要是是查询 2月20到3月19日 就没有结果了
SELECT `baby_birthday` FROM `user` WHERE month(`baby_birthday`) between 2 and 3  and DAYOFMONTH(`baby_birthday`) between 20 and 19
交换20与19的位置,那么只能查询出2月19到2月20之间的朋友了,3月的一个都没有查询出来! 

解决方案 »

  1. 是不是考虑重新设计下你的表结构阿,比如单独增多一列专门存储月份。。
    这个user表用户一多,你的语句会慢的恐怖的。
    你上面的语句没有一个不是全表扫描的。
      

  2. 都select出来之后 在用PHP选吧
      

  3. 同意3楼的php处理肯定不现实,如果user表很大sql 有计算么,肯定是全表查寻,索引都没办法搞还是加字段吧
      

  4. 或者这样的SQL行不行:(month()=2 or month()=3) and (day()>=1 and day()<=20)
      

  5. date_format(baby_birthday,'%m%d')>='0220' and date_format(baby_birthday,'%m%d')<='0319'
    不可以吗
      

  6. 建议将日期格式改为int(10),可以精确定义查询的日期
      

  7. SELECT `baby_birthday` FROM `user` WHERE month(`baby_birthday`) between 0220 and 0319把他们存成这样滴
      

类似问题 »