mysql 判断日期间隔是否为3个月,mysql 的if的用法,临时变量的用法,mysql的 between and

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 回答日期
 
 
 
 
 
 
 
 
 
 
posted @ 2012-12-03 14:43  梨花驿路  阅读(2379)  评论(0编辑  收藏  举报