zoukankan      html  css  js  c++  java
  • 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 回答日期
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Permutations II
    Add Binary
    Integer to Roman
    Roman to Integer
    Word Break
    完整记录一则Oracle 11.2.0.4单实例打PSU补丁的过程
    SQL Tuning 基础概述06
    SQL Tuning 基础概述05
    SQL Tuning 基础概述04
    SQL Tuning 基础概述03
  • 原文地址:https://www.cnblogs.com/joeylee/p/2799611.html
Copyright © 2011-2022 走看看