日期之间的日期,忽略年份

gad*_*lat 10 mysql date between

如果日期是独立于年份的日期范围,那么比较最好(最快)的方法是什么?

表"日期":

    some_column| since        | upto        |  
    -----------|--------------|-------------|
   'foo'       | '2011-05-01' | '2013-06-01'|
Run Code Online (Sandbox Code Playgroud)

现在我希望这个查询返回'foo'

SELECT foo FROM dates WHERE '2014-05-05' BETWEEN `since` AND `upto`
Run Code Online (Sandbox Code Playgroud)

如果需要,我可以在"日期"表中更改存储日期的类型/格式,但我无法更改我放入查询的日期格式,因为该值通常来自另一个表(它是使用连接的更复杂查询的一部分).

vik*_*ngh 6

SELECT foo FROM dates WHERE DATE_FORMAT('2014-01-15', "%m-%d") 
    BETWEEN DATE_FORMAT(`since`,"%m-%d") AND DATE_FORMAT(`upto`,"%m-%d")
Run Code Online (Sandbox Code Playgroud)

这是SQL FIDDLE演示


Lar*_*tig 5

使用DayOfYear函数:

 SELECT foo FROM dates WHERE DayOfYear('2014-05-05') 
    BETWEEN DayOfYear(`since`) AND DayOfYear(`upto`)
Run Code Online (Sandbox Code Playgroud)

  • 不错的想法。我也考虑过。但是leap年将过去。3月1日是非-年的第60天,而a年是第61天。 (2认同)