SQL查询不在两个日期之间

Kel*_*vin 15 sql between

我需要一些SQL Query帮助.

我试图选择表test_table中的所有记录,这些记录不适合两个日期'2009-12-15'和'2010-01-02'.

这是我的表结构:

`start_date` date NOT NULL default '0000-00-00',
`end_date` date NOT NULL default '0000-00-00'

-----------------------------
 **The following record should not be selected:**

`start_date`, `end_date`
'2003-06-04', '2010-01-01'
Run Code Online (Sandbox Code Playgroud)

我的查询:

SELECT * 

FROM `test_table` 
WHERE 

CAST('2009-12-15' AS DATE) NOT BETWEEN start_date and end_date 
AND 
CAST('2010-01-02' AS DATE) NOT BETWEEN start_date and end_date
Run Code Online (Sandbox Code Playgroud)

知道我的查询选择错误记录的原因吗?我应该将查询中的值的顺序更改为:

start_date NOT BETWEEN CAST('2009-12-15' AS DATE) and CAST('2010-01-02' AS DATE)
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助

小智 26

尝试怎么样:

select * from 'test_table'
where end_date < CAST('2009-12-15' AS DATE)
or start_date > CAST('2010-01-02' AS DATE)
Run Code Online (Sandbox Code Playgroud)

这将返回所有与日期范围不重叠的日期范围.

  • @xnoise - 祈祷告诉你的是什么? (3认同)
  • 我建议不要这样,即使是中型表,这也会导致查询变得非常慢. (2认同)
  • 你能解释一下为什么"NOT BETWEEN"在这里不起作用吗? (2认同)

Der*_*sed 7

你的逻辑是倒退的.

SELECT 
    *
FROM 
    `test_table`
WHERE
        start_date NOT BETWEEN CAST('2009-12-15' AS DATE) and CAST('2010-01-02' AS DATE)
    AND end_date NOT BETWEEN CAST('2009-12-15' AS DATE) and CAST('2010-01-02' AS DATE)
Run Code Online (Sandbox Code Playgroud)