2011-08-25 116 views
5

我需要SQL查询。如果我有两列STARTDATEEND_DATE
我想选择日期落在这两个日期之间的所有行。在两列之间选择日期

例如:startdate = 1/1/2011 AND enddate = 2/2/2011。

+0

您的意思是说,对于结果集中开始和结束之间的每个单独日期,您是否需要一行? – Yuck

+0

[获取两个日期之间的日期列表]的可能重复(http://stackoverflow.com/questions/510012/get-a-list-of-dates-between-two-dates) – Jacob

+0

如果这是MySQL。如果没有,对不起,快速愚蠢的投票:) – Jacob

回答

10
SELECT * FROM table1 
WHERE '2011-01-01' BETWEEN table1.startdate AND table1.enddate 

更换明确日期要么now()或参数或什么的。

如果结束日期是定义为NOT NULL你可以这样做:

SELECT * FROM table1 
WHERE '2011-01-01' BETWEEN table1.startdate AND COALESCE(table1.enddate, NOW()) 

参见:http://www.1keydata.com/sql/sql-coalesce.html

+1

+1 - 但是我会将enddate更改为'COALESCE(enddate,now())' – Lamak

+0

如果'enddate'被定义为NOT NULL,那么建议不错。 – Johan

0

这对您有帮助吗?

select * 
from table 
where START_DATE < NOW() AND END_DATE > NOW() 

取决于数据库,使用CURRENT_TIMESTAMP()或TODAY()

0

你的意思是这样的:

select * 
from mytable 
where start_date >= '01/01/2011' 
and end_date <= '02/01/2011' 

直到你做更多的澄清你的问题,我们很难提供更好的答案。

相关问题