3

我有一个允许用户生成报告的 php 脚本,他们可以选择 3 个日期范围。IE

2012-01-01 to 2012-01-31
AND 
2011-01-01 to 2011-01-31
AND 
2010-01-01 to 2010-01-31

但是当我进行查询时,在某个日期范围之间没有记录,查询不会返回任何值。

这是我的查询:

 SELECT DealerName WHERE InterviewDate >= "2012/01/01 " AND InterviewDate <= " 2012/03/31"
 AND InterviewDate >= "2012/07/01 " AND InterviewDate <= " 2012/09/31"

我需要一个查询,如果在其中一个日期范围中找到数据,则无论后续日期范围中是否没有数据,它都会返回数据。

数据被汇总到一个表格中,其中相同的数据可能出现在多个日期。

例如:

dealerName 1    2012-01-01
dealerName 1    2012-02-31
dealerName 2    2012-03-01
dealerName 1    2012-06-01
dealerName 1    2012-06-31

所以如果我想查询 2012-01-01 和 2012-02-31 AND 2012-06-01 AND 2012-06-31 之间的数据。我意识到 1 个日期范围可以包含所有这些范围,但用户可能希望排除这两个日期范围之间的数据。

4

5 回答 5

10

面试日期不能介于 x 和 y 之间,并且仍然介于 z 和 zz 之间。你错过了OR- 另外,看看BETWEEN运营商

SELECT DealerName
FROM table
WHERE InterviewDate BETWEEN '2012-01-01' AND '2012-01-31'
    OR InterviewDate BETWEEN '2011-01-01' AND '2011-01-31'
    OR InterviewDate BETWEEN '2010-01-01' AND '2010-01-31'

编辑,对不起,错过了表名:)

于 2013-02-11T07:01:13.883 回答
4

您需要使用OR而不是AND

WHERE   (InterviewDate BETWEEN '2012-01-01' AND '2012-01-31')
        OR
        (InterviewDate BETWEEN '2011-01-01' AND '2011-01-31')
        OR
        (InterviewDate BETWEEN '2010-01-01' AND '2010-01-31')

更新 1

我觉得你有Relational Division问题

SELECT name
FROM   table1
WHERE  DATE BETWEEN '2012-01-01' AND '2012-02-31'
       OR
       DATE BETWEEN '2012-06-01' AND '2012-06-31'
GROUP BY name
HAVING COUNT(*) = 2
于 2013-02-11T07:00:16.693 回答
4

为什么不使用 OR 而不是 AND ?

SELECT DealerName WHERE ( InterviewDate >= "2012/01/01 " AND InterviewDate <= " 2012/03/31" )  OR ( InterviewDate >= "2012/07/01 " AND InterviewDate <= " 2012/09/31" )
于 2013-02-11T07:00:44.933 回答
3

使用OR代替AND

SELECT DealerName FROM tbl
WHERE InterviewDate >= '2012/01/01' AND InterviewDate <= '2012/03/31'
 OR InterviewDate >= '2012/07/01' AND InterviewDate <= '2012/09/31'
于 2013-02-11T07:00:45.553 回答
1

这是我的收获:) 因为您正在检查2010 年、2011 年、2012 年month的 1 月。我们可以使用和功能。yearMONTHYEAR

SELECT DealerName
FROM yourtable
WHERE Month(InterviewDate) = 1
AND Year(InterviewDate) IN (2010, 2011, 2012)
;

SELECT DealerName
FROM yourtable
WHERE Month(InterviewDate) IN (1, 2) // if there are particular months
AND Year(InterviewDate) IN (2010, 2011, 2012)
;
于 2013-02-11T07:13:11.630 回答