如果日期为空,如何调整年份

时间:2014-02-04 16:11:13

标签: php mysql sql database

我有一个存储事件日记的数据库(非常类似于facebook的工作方式),这些数据可以针对特定的单一日期,或每年重复发生。例如,我可能会在2013年6月1日举行婚礼,并在每年5月4日举行生日。我试图提取下一年发生的所有事件的清单,按时间顺序排列。

id u_id title           event_day  event_month  event_year
1   1   Wedding         22         02           2013
2   1   Jan Birthday    1          1            
3   1   May Birthday    04         5            

使用此查询,我可以填写当前年份,但如果事件已经发生(例如上面数据中的'jan birthday',则需要是当前年份加上一个添加:

SELECT title, IF(event_year = '', YEAR(CURDATE()), event_year) AS ev_year,
event_day, event_month 
FROM `events`

返回:

title           ev_year event_day  event_month  
Wedding         2013    22         02
Jan Birthday    2014    1          1
May Birthday    2014    04         5

由于

2 个答案:

答案 0 :(得分:1)

我建议将其存储在单个日期时间列中,只标记重复发生的事件 - 您仍然可以对它们进行计算。作为一个好处,你甚至可以知道peoaple的年龄:)

但是用你当前的表格:

SELECT title, IF(event_year = '', 
IF(event_day < DAY(CURDATE()) AND event_month = MONTH(CURDATE()) OR event_month <
MONTH(CURDATE()), YEAR(CURDATE())+1, YEAR(CURDATE())), event_year) AS ev_year,
event_day, event_month 
FROM `events`

答案 1 :(得分:1)

title             event_date 
Wedding           2013-22-02
Jan Birthday      2014-01-01
May Birthday      2014-04-05
Als Birthday      ?-11-15 //(We know birthdays happen yearly so we can calculate back on this in SQL)
Jane Doe Wedding  ?-1-2 //(We might not know the year yet. So we can handle this in 2 ways. Dont enter the event into your planner until the couple tells you the date (or mails you the date), OR you can treat the date the same as a birthday so you get alerted this year)

好的,你要做的就是做日期比较;让mysql用以下的方式处理这个逻辑:

  

SELECT id FROM events WHERE CURDATE()&gt;活动日期; //这会让你全部   过期事件

现在您可以通过执行日期间隔来更新年份,例如:

  

UPDATE事件SET event_date = DATE_ADD(event_date,INTERVAL 1年)   WHERE id IN(#numbers_from_above_query#); //这将为你增加一年   日期字段

现在,当你不知道日期时,你可以做到

  

DATE_SUB(CURDATE(),INTERVAL 1年)//这将减去   这一年让你落后一年。你可以用这个来   填充您的数据。通过这种方式,第一个查询应该捕获a   生日已经过去了。