与年份无关地在日期范围内查找记录

时间:2018-11-15 10:31:08

标签: sql

我想查找某个日期范围(例如8月15日至12月15日)之间的记录,而与年份无关。 因此,基本上,我希望从8月到12月的所有记录,而不是从8月1日到14日和12月16日到31天的所有记录。

我已经可以通过两种方式做到这一点

  1. 通过使用多个条件使用“和/或”或where子句中的情况。
  2. 使用第几天一年(当然是leap年)。

我只想知道是否还有其他或更好的方法,例如公式的某行函数

我试图让问题的解释尽可能简单。仍然,如果您需要它,我也将使用表格数据发布说明。 (不过,我必须创建它。)

首先感谢所有花时间阅读和考虑问题的人。

3 个答案:

答案 0 :(得分:3)

效率不是特别高,但是我希望看到这样的东西:

SELECT * 
  FROM my_table
 WHERE DATE_FORMAT(dt,'%m-%d') BETWEEN '08-15' AND '12-14' 
 ORDER 
    BY dt;

答案 1 :(得分:0)

您是否正在寻找类似的东西?想法是将每个日期转换为同一年(在本例中为1年)。为此,请减去适当的年数。

create table MyTable ( MyDate date )

insert into MyTable ( MyDate ) values
( '1889-08-14' ), ( '1891-08-15' ), ( '1899-12-30' ),
( '2018-04-04' ), ( '2018-08-14' ), ( '2018-08-15' ),
( '2018-09-10' ), ( '2018-09-20' ), ( '2018-12-15' ),
( '2018-12-16' ), ( '2019-08-11' ), ( '2019-08-21' ),
( '2019-09-22' ), ( '2019-12-03' ), ( '2019-12-31' ),
( '2020-01-01' ), ( '2030-08-14' ), ( '2040-08-15' ),
( '2050-12-15' ), ( '2060-12-16' ), ( '2222-09-23' )

select * From MyTable 
where DateAdd ( year, 1-Year(MyDate), MyDate ) between '0001-08-15' and '0001-12-15'

结果是:

MyDate
----------
1891-08-15
2018-08-15
2018-09-10
2018-09-20
2018-12-15
2019-08-21
2019-09-22
2019-12-03
2040-08-15
2050-12-15
2222-09-23

如果您不愿意参考第1年,则可以在任何一年。

where DateAdd(year, 2000-Year(MyDate), MyDate)between'2000-08-15'and'2000-12-15'

在MYSQL中,它类似于:

where DATE_ADD(MyDate, INTERVAL 1-year(MyDate) YEAR);

答案 2 :(得分:-1)

使用Sql DATEDIFF

SELECT DATEDIFF (d,'2018-08-15','2018-12-16')