我需要一些SQL查询的帮助。
我正在尝试从表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'我的问题是:
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知道为什么我的查询选择了错误的记录吗?我是否应该将查询中值的顺序更改为如下所示:
start_date NOT BETWEEN CAST('2009-12-15' AS DATE) and CAST('2010-01-02' AS DATE)非常感谢你的帮助
发布于 2009-11-10 01:25:06
试试看:
select * from 'test_table'
where end_date < CAST('2009-12-15' AS DATE)
or start_date > CAST('2010-01-02' AS DATE)这将返回与您的日期范围完全不重叠的所有日期范围。
发布于 2009-11-10 01:24:47
你的逻辑是倒退的。
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)发布于 2009-11-10 01:22:13
您的意思是所选行的日期范围不应该完全在指定的日期范围内?在这种情况下:
select *
from test_table
where start_date < date '2009-12-15'
or end_date > date '2010-01-02';(以上语法用于Oracle,您的语法可能略有不同)。
https://stackoverflow.com/questions/1702420
复制相似问题