mysql 判断日期间隔是否为3个月
1:月份之间至少为3个月,并且两者之间的日子,必须是大于或者是等于(例如:开始日期 20120105,日子是5号,结束日期是20120405,日子也是5号,那么月份相差是3一个月+日子相同(或者结束日期的日子,大于开始日期的日子), 这样就是间隔3个月,或者是3个月以上了 )
2:间隔4个月以上
mysql月份间隔的函数
SELECT PERIOD_DIFF('201212', '201209'); -- 月份的间隔。函数的格式是 的格式为“YYYYMM” 或者 “YYMM”,返回 3 SELECT DATEDIFF('20120401','20120101') -- 返回间隔的日子,返回91(即使是包含2月份,那么3个月之和应该也大于90,不严谨) SELECT DATEDIFF('20120801','20120501') -- 返回间隔的日子,返回91 SELECT EXTRACT(YEAR_MONTH FROM '20120201'); -- 返回年月 201202 SELECT DAY('20120530') -- 返回天数 30
那么在存储过程,就是这样写
DELIMITER $$ USE `xxxxxx`$$ DROP PROCEDURE IF EXISTS `fn_search_xxxx`$$ CREATE DEFINER=`root`@`%` PROCEDURE `fn_search_xxxx`(p_UserId VARCHAR(64),p_StartDate DATETIME,p_EndDate DATETIME) BEGIN SET @p_StartDate_month=EXTRACT(YEAR_MONTH FROM p_StartDate); -- 获取的是年月 例如 20120203返回的是201202 SET @p_EndDate_month=EXTRACT(YEAR_MONTH FROM p_EndDate); SELECT COUNT(0) AS 回答数, IF( (PERIOD_DIFF(@p_EndDate_month, @p_StartDate_month)=3 AND DAY(p_EndDate)>DAY(p_StartDate)) OR (PERIOD_DIFF(@p_EndDate_month, @p_StartDate_month)>3) , DATE_FORMAT(`AnswerDate`,'%Y-%m-01'), DATE_FORMAT(`AnswerDate`,'%Y-%m-%d') ) AS 回答日期 FROM `tabletemp` WHERE `UserId`=p_UserId AND `AnswerDate` BETWEEN p_StartDate AND p_EndDate GROUP BY 回答日期; END$$ DELIMITER ;
这里有一个 if 方法
IF( a > b , dosomethingA , dosomethingB ) AS 回答日期