在两个列之间选择日期

18

我需要一条SQL查询语句。

如果我有两个列STARTDATEEND_DATE

我想选择所有日期落在这两个日期之间的行。

例如:startdate=2011年1月1日,enddate=2011年2月2日。


你的意思是在结果集中需要每个开始和结束日期之间的每个单独日期的一行吗? - Yuck
可能是获取两个日期之间的日期列表的重复问题。 - Jacob
如果这是MySQL的话,如果不是的话,对于快速关闭重复投票感到抱歉 :) - Jacob
5
对于所有的关闭投票者,请问这不是一个真正的问题吗?很明显,楼主想要执行 SELECT * FROM t1 WHERE ? BETWEEN startdate AND enddate - Johan
4个回答

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

now()或参数或其他方式替换明确的日期。

如果enddate未定义为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


2
+1 - 但我会将enddate更改为COALESCE(enddate,now()) - Lamak
如果 enddate 被定义为 NOT NULL,那是个好建议。 - Johan

6

这能帮助您吗?

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

根据数据库的不同,使用CURRENT_TIMESTAMP()或TODAY()。


1

您是指这个吗:

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

在你进一步澄清问题之前,我们很难提供更好的答案。


0

SELECT COUNT(DISTINCT id) FROM Table WHERE rqmnt_start_date::TIMESTAMP >= '27/01/2022' AND rqmnt_end_date::TIMESTAMP <= '30/11/2022'


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,