3

这是我的问题。我的系统以您通常的 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

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

4

2 回答 2

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 日,那么您只会回到 2012 年 2 月 28 日,但我想您希望数据回到 2011 年 2 月 27 日... 一种可能的解决方案是确保您始终将日期标准化为闰年,取回 8 天的日期并丢弃您不想要的前端。

于 2012-11-27T08:49:32.963 回答
0

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

  • DAY(your_DATETIME_Variable)--> 以整数形式获取日期
  • MONTH(your_DATETIME_Variable)--> 获取月份为整数
  • YEAR(your_DATETIME_Variable)--> 将年份作为整数
于 2012-11-27T08:44:13.997 回答