2011-03-15 55 views
3

我怎样才能做到在过滤日期范围BETWEEN和或选择

Select * from XXX where date between DATE1 AND DATE2 OR Between DATE3 AND DATE4 

(从更新张贴的答案复制)

这里是我的病情

WHERE (items_count != '0') 
     AND (main_table.is_active = '1') 
     AND (main_table.store_id IN ('0', '1')) 
     AND (main_table.updated_at BETWEEN 
      '2011-03-04 16:52:19' AND '2011-03-05 16:52:19' 
      ) 
     OR (main_table.updated_at BETWEEN 
      '2011-03-13 16:52:19' AND '2011-03-14 16:52:19' 
      ) 
LIMIT 0, 30 

第一个条件永不使用

+0

您需要在基或AND((第一状态)OR(第二状态)) – BlackTigerX 2011-03-15 17:15:14

回答

3
Select * from XXX 
    where (date between DATE1 AND DATE2) 
     OR 
     (date between DATE3 AND DATE4) 

编辑:

试试这个:

WHERE items_count != '0' AND 
     main_table.is_active = '1' AND 
     main_table.store_id IN ('0', '1') AND 
     ( main_table.updated_at BETWEEN '2011-03-04 16:52:19' AND '2011-03-05 16:52:19' 
     OR 
     main_table.updated_at BETWEEN '2011-03-13 16:52:19' AND '2011-03-14 16:52:19' 
    ) 
+0

那不行,我还有其他有条件的地方 – FzhEmca 2011-03-15 17:04:44

+1

编辑的问题,并告诉我们你在那里的条件。 – codaddict 2011-03-15 17:05:43

1

把它们作为独立的条件:

select * from xxx where (date between date1 and date2) or (date between date3 and date4); 
1

像这样:

select * from XXX 
where (date between DATE1 AND DATE2) 
    or (date between DATE3 AND DATE4) 
+0

+1格式:) – 2011-03-15 17:03:26

1

OCD的位始终与SQL帮助.. 。

你不用不需要你有的所有括号,但是OR没有按你期望的方式工作。

.... 
    WHERE 
    items_count != '0'   
    AND 
    main_table.is_active = '1'   
    AND 
    main_table.store_id IN ('0', '1') 
    AND (
     main_table.updated_at 
     BETWEEN '2011-03-04 16:52:19' 
     AND '2011-03-05 16:52:19' 
     OR 
     main_table.updated_at 
     BETWEEN '2011-03-13 16:52:19' 
     AND '2011-03-14 16:52:19' 
    ) 
    LIMIT 0 , 30