我需要从MySQL表中选择一个特定的日期范围,忽略年份

时间:2012-11-27 08:39:36

标签: mysql algorithm date range

这是我的问题。我的系统以您通常的DATETIME格式存储日期和时间:

'YYYY-MM-DD HH:MM:SS'

这就是我遇到的问题:

我需要选择具有此格式的日期字段的所有联系人:

'XXXX-12-02 23:59:59' and every other date 7 days leading up to it.

例如,我需要获取包含这些日期的所有这些行:

1965-12-02
1985-11-28
1990-12-01

这是可能的吗?如果是,可以给我任何帮助或提示吗?

2 个答案:

答案 0 :(得分:0)

您可以使用以下功能获取DATETIME变量的特定部分。

  • DAY(your_DATETIME_Variable) - >获得整数天
  • MONTH(your_DATETIME_Variable) - >获得整数月份
  • YEAR(your_DATETIME_Variable) - >获得整数年份

答案 1 :(得分:0)

简单部分:查找同一天和当月的任何日期:

SELECT .... FROM .... WHERE 
   month(timefield)=month('2012-12-02 23:59:59') 
   and day(timefield) = day('2012-12-02 23:59:59)

一种混乱的方式,但它(大部分)将起作用

SELECT .... FROM .... WHERE 
   (month(timefield)=month('2012-12-02 23:59:59') 
   and day(timefield) = day('2012-12-02 23:59:59')) or
   (month(timefield)=month(date_sub('2012-12-02 23:59:59' interval 1)) 
   and day(timefield) = day(date_sub('2012-12-02 23:59:59') interval 1)) or
   (month(timefield)=month(date_sub('2012-12-02 23:59:59' interval 2)) 
   and day(timefield) = day(date_sub('2012-12-02 23:59:59') interval 2)) or

依旧......

然后出现了问题:闰年是什么......我没有任何好的解决方案......例如,如果您的种子日期是2012年3月5日,那么您将只回到28-feb -2012,但我想你希望数据回到2011年2月27日...一个可能的解决方案是确保你总是将日期标准化为闰年,取回8天后的日子并丢弃你做的事情不想在前端。