是否有sql符号可以告诉几个月之间的检查?

时间:2009-10-21 17:13:47

标签: php sql mysql

我将重复活动存储在事件表中,该事件表发生在一年中的某些月份,任何年份和每年。例如;

CREATE TABLE events ( 
  event_id tinyint(3) unsigned NOT NULL auto_increment, 
  name varchar(255) NOT NULL, 
  month_from tinyint(3) unsigned NOT NULL, 
  month_to tinyint(3) unsigned NOT NULL, 
  PRIMARY KEY (event_id) ) 
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3; 

INSERT INTO events 
  (event_id, name, month_from, month_to) 
VALUES 
  (1, 'Event ABC', 5, 11), (2, 'Event XYZ', 12, 4);

活动ABC - 每年5月至11月举行 活动XYZ - 每年12月至4月举行

在我的事件表中,我将month_frommonth_to存储为数值。

我想要做的是说当前月份(10月)并将其传递给sql查询,以便它返回给我正确的事件“事件ABC”。但是我也想把它传递给未来一个月,比如2月它应该回到我的“事件XYZ”

我希望这有道理吗?

4 个答案:

答案 0 :(得分:1)

尝试:

 FROM TABLE t
WHERE @month BETWEEN t.month_from AND t.month_to

如果你想传递日期&从比较日期开始计算月份:

 FROM TABLE t
WHERE MONTH(@your_date) BETWEEN t.month_from AND t.month_to

参考:MONTH

答案 1 :(得分:1)

select * from tbl where (month_from <= $YOUR_MONTH and month_to >= $YOUR_MONTH) or (month_from > month_to and (month_to >= $YOUR_MONTH or month_from <= $YOUR_MONTH)

这也适用于DEC-APR范围

答案 2 :(得分:0)

select * from tbl
where month_from <= <YOUR_MONTH> and month_to >= <YOUR_MONTH>

假设<YOUR_MONTH>是一个在语义上等同于month_from和month_to字段的值。

更新:刚刚注意到12月到4月的第二个例子。也许你可以为12月到12月和1月到4月的事件创建两个范围。

答案 3 :(得分:0)

这应该这样做:

SELECT * FROM events WHERE month_from <= $your_month AND month_to >= $your_month

您不限于整数月份。您可以将DATE数据类型与MySQL(或数据库的等效项)一起使用,并使用与上面相同的查询。您的数据库将“理解”DATE字段的&lt;,&gt;,=运算符。