我想查找某个日期范围(例如8月15日至12月15日)之间的记录,而与年份无关。 因此,基本上,我希望从8月到12月的所有记录,而不是从8月1日到14日和12月16日到31天的所有记录。
我已经可以通过两种方式做到这一点
我只想知道是否还有其他或更好的方法,例如公式的某行函数
我试图让问题的解释尽可能简单。仍然,如果您需要它,我也将使用表格数据发布说明。 (不过,我必须创建它。)
首先感谢所有花时间阅读和考虑问题的人。
答案 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')