列出一个月/一年内正在进行的所有锦标赛

时间:2014-12-05 22:54:09

标签: sql sql-server

我正在尝试解决这个select语句。 我的问题是列出一个月和一年内正在进行的所有锦标赛。

例如,我想列出

2005年3月正在进行的所有锦标赛。

我有这些专栏:

表:锦标赛 (id_champ,name,startDate,endDate)。

我如何列出2005年3月正在进行的所有锦标赛?

我正在尝试这个:

SELECT * from championships 
where (month(startDate) <= 3 
and year(startDate)<=2005) 
and (month(startDate)<=3 and year(endDate)<=2005

这里的任何人都知道解决问题的正确方法或最佳方法吗?

2 个答案:

答案 0 :(得分:2)

要抓住2005年3月的任何活动:

select
*
from
championships
where
year(enddate) = 2005
and 3 between month(startdate) and month(enddate).

答案 1 :(得分:2)

Select *
From championships
where (startdate < `2005/4/1`) AND (enddate > '2005/2/28')

这将在2005年4月1日之前开始,并在2005年2月28日之后的任何时间结束。

使用dateadd实际上是最好的,照顾闰日等。所以考虑一下:

Select *
From championships
where (startdate < dateadd(1, mm, `2005/3/1`)) AND (enddate > dateadd(-1, dd, '2005/3/1' ) )

现在您不必让代码计算开始日期的月份的最后一天,也不必计算结束日期的最后一天。