mysql函数过程判断数据日期是不是月末(区分平年和闰年)

创建了一个名为f_check_date的MySQL函数,用于判断输入的日期是否为所在月份的最后一天,考虑了平年和闰年的区别。通过CASE语句分别处理1、3、5、7、8、10、12月的31号,4、6、9、11月的30号,以及2月的情况,根据年份判断闰年和平年。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DELIMITER $$

USE `dis`$$

DROP FUNCTION IF EXISTS `f_check_date`$$

CREATE DEFINER=`root`@`%` FUNCTION `f_check_date`(data_date VARCHAR(10)) RETURNS INT(10)
BEGIN
    DECLARE v_flag INT;#1代表是月末日期,0代表非月末
    SELECT YEAR(DATE_FORMAT(data_date,'%Y%m%d')) INTO @year;
    SELECT MONTH(DATE_FORMAT(data_date,'%Y%m%d')) INTO @v_month;
    SELECT DAY(DATE_FORMAT(data_date,'%Y%m%d')) INTO @v_day;
    
    #1,3,5,7,8,10,12月末日期为31号
    CASE
    WHEN @v_month IN (1,3,5,7,8,10,12) THEN
        IF @v_day = 31 THEN    
           SET v_flag = 1; #月末日期
         ELSE SET v_flag=0;#非月末日期
        END IF;
    #4,6,9,11月末为30号
    WHEN @v_month IN (4,6,9,11) THEN
        IF @v_day = 30 THEN
           SET v_flag =1;#月末日期
        ELSE SET v_flag=0;
        END IF;
        
    
    #2月判断
    #1) 能够被4整除但不能被100整除。
    #2) 能够被400整除。
    WHEN MOD(@year,4)=0 AND MOD(@year,100)!=0 OR MOD(@year,400)=0 THEN
        IF @v_month=2 AND @v_day <> 29 THEN
         SET v_flag =0;
        ELSE SET v_flag=1;#月末日期
        END IF;
    #平年
    WHEN MOD(@year,4)<> 0 AND MOD(@year,100)=0 OR MOD(@year,400)<> 0 THEN
        IF @v_month=2 AND @v_day <> 28 THEN
         SET v_flag =0;
        ELSE SET v_flag=1;#月末日期
        END IF;    
        
    END CASE ;
    
    RETURN  v_flag;
END$$

DELIMITER ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值