• 締切済み

2つのカラムの日付の範囲

CREATE TABLE IF NOT EXISTS `events` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `start_on` date NOT NULL, `end_on` date DEFAULT NULL, PRIMARY KEY (`id`) ) ; INSERT INTO `events` ( `id` ,`start_on` ,`end_on` ) VALUES ( NULL, '2011-02-10', '2011-12-28' ); INSERT INTO `events` ( `id` ,`start_on` ,`end_on` ) VALUES ( NULL, '2011-03-01', NULL ); INSERT INTO `events` ( `id` ,`start_on` ,`end_on` ) VALUES ( NULL, '2011-04-01', NULL ); INSERT INTO `events` ( `id` ,`start_on` ,`end_on` ) VALUES ( NULL, '2011-04-10', '2011-05-10' ); INSERT INTO `events` ( `id` ,`start_on` ,`end_on` ) VALUES ( NULL, '2011-01-10', '2011-02-15' ); '2011-03' を渡したら2件帰ってくるような SQL 文を書きたいです。 (3月にやってるイベントの一覧を取得したい。) WHERE `start_on` BETWEEN '2011-03-01' AND '2011-03-31' だと1行目が取得できませんでした。 すみません。よろしくお願いします。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

こんな感じでよいのでは? SELECT * FROM `events` WHERE `start_on` BETWEEN (@s:='2011-03-01') AND '2011-03-31' OR @s BETWEEN `start_on` AND `end_on`

  • ymikuru
  • ベストアンサー率100% (1/1)
回答No.1

SELECT * FROM events WHERE start_on <= '2011-03-31' AND (end_on >= '2011-03-01' OR end_on IS NULL); ではどうでしょうか?

関連するQ&A