我正在尝试解决这个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
这里的任何人都知道解决问题的正确方法或最佳方法吗?
答案 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' ) )
现在您不必让代码计算开始日期的月份的最后一天,也不必计算结束日期的最后一天。