正在生效:
select id from table where find_in_set(month(curdate(),allowmonth) and unix_timestamp(curdate()) between unix_timestamp(sdate) and unix_timestamp(edate);
即将生效:
select id from table where unix_timestamp(curdate()) between unix_timestamp(sdate) and time_stamp(edate);
已经过期:
select id from table where unix_timestamp(curdate()) > unix_timestamp(edate);

解决方案 »

  1.   

    即将生效:
    select id from table where locate(month(curdate(),allowmonth)=0 and unix_timestamp(curdate()) between unix_timestamp(sdate) and time_stamp(edate);
      

  2.   

    SQL 查询 :  SELECT count( tbl_id ) 
    FROM tbl
    WHERE locate( month( curdate( ) , disp_month ) =0 AND unix_timestamp( curdate( ) ) 
    BETWEEN unix_timestamp( 'b_date' ) AND time_stamp('e_date'
    ) MySQL 返回:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' disp_month )  =0 AND unix_timestamp( curdate(  )  ) 
    BETWEEN unix_timestamp(  '' at line 3
      

  3.   

    SELECT count( Travel_id ) 
    FROM Travel
    WHERE locate( month( curdate( ) , disp_month ) =0 AND unix_timestamp( curdate( ) ) 
    BETWEEN unix_timestamp( b_date ) AND unix_timestamp( e_date ) MySQL 返回:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' disp_month )  =0 AND unix_timestamp( curdate(  )  ) 
    BETWEEN unix_timestamp( b_' at line 3
      

  4.   

    find_in_set(month(curdate(),allowmonth) 这句有问题...
      

  5.   

    sorry
    find_in_set(month(curdate(),allowmonth))
      

  6.   

    locate( month( curdate( ) , disp_month ))
      

  7.   

    ..晕了
    find_in_set(month(curdate()),allowmonth)
    locate(month(curdate()) , disp_month)
    试试
      

  8.   

    SELECT * FROM 表 WHERE (MONTH(GETDATE()) BETWEEN MONTH(sdate) AND MONTH(edate)) AND MONTH(GETDATE()) IN (allowmonth)如果这样不行就这样SELECT * FROM 表 WHERE (MONTH(GETDATE()) BETWEEN MONTH(sdate) AND MONTH(edate)) AND MONTH(GETDATE()) IN (SELECT allowmonth FROM 表 AS B WHERE B.ID = 表.ID)其实你的算法里面有个主要参数就是当前时间,你如果忽略它就很难想通,把当前时间传入先判断区间,然后再判断是否在包含的月份就可以了
      

  9.   

    To :FEB15(张郎) 谢谢,我在仔细想想看..
      

  10.   

    相反如果你要查询过期的,就需要 NOT IN
      

  11.   

    通过了么..??分不是问题.
    id      sdate         edate       allowmonth (注:允许发生的月份)        
    1      2006-12-12    2008-12-12    1,2,3,4,10,12
    2      2006-11-12    2007-12-12    1,9
    3      2006-1-12    2006-12-12     1,2,9
    4      2006-2-12    2005-12-12     1
    5      2006-12-12    2008-12-12    10,12
    6      2006-12-12    2007-12-12    1第六条数据呢..你的算法能判断出来么?这个应该属于过期的了..
      

  12.   

    http://community.csdn.net/Expert/topic/5398/5398364.xml?temp=.1766168 新的.