zoukankan      html  css  js  c++  java
  • 存储过程-求当前日期是这个月的第几周

    表定义:

    CREATE TABLE `time_dim` (
       `DAY_KEY` char(8) DEFAULT NULL COMMENT '时间',
       `DAY_DATE` date DEFAULT NULL COMMENT '日期',
       `DAY_YEAR` char(4) DEFAULT NULL COMMENT '年份',
       `DAY_QUARTER` char(2) DEFAULT NULL COMMENT '季度',
       `DAY_MONTH` char(2) DEFAULT NULL COMMENT '月份',
       `week_inmonth` char(1) DEFAULT NULL COMMENT '月份的第几周',
       `WEEK_INYEAR` char(2) DEFAULT NULL COMMENT '年份的第几周',
       `DAY_INMONTH` char(2) DEFAULT NULL COMMENT '日'
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    思路:    

    当前日期   -    这个月的第一天   +1     =     这个月的第几天   n

    1.通过内置函数得到这个月1号是星期几,从而得到第一周有多少天 m

    2.n<=m在第一周内   属于第一周

       n>m在第一周外   (n-m)/7+1   得到周数

    DELIMITER $$
    USE `test`$$
    DROP FUNCTION IF EXISTS `get_week_month`$$
    CREATE DEFINER=`root`@`localhost` FUNCTION `get_week_month`(date1 CHAR(10)) RETURNS CHAR(10)
    BEGIN
    DECLARE result INT(11);
    DECLARE startday CHAR(8);
    DECLARE xingqi   CHAR(10);       /*本月的第一天是星期几*/
    DECLARE week_num INT(11); /*本月的第一周一共有几天*/
    DECLARE day_num INT(11); /*date1 是这个月的第几天*/
    DECLARE day_num2 INT(11);
    DECLARE tmp_date1 DATE;
    DECLARE tmp_date2 DATE;
    IF SUBSTRING(date1,7,2)='01' THEN
    SET result=1;
    ELSE
    SET startday=CONCAT(SUBSTRING(date1,1,6),'01');
    SET xingqi=DAYOFWEEK(STR_TO_DATE(startday,'%Y%m%d'));
    SELECT CASE xingqi
    WHEN '2' THEN 7
    WHEN '3' THEN 6
    WHEN '4' THEN 5
    WHEN '5' THEN 4
    WHEN '6' THEN 3
    WHEN '7' THEN 2
    WHEN '1' THEN 1
    END INTO @week_num1;
    SET week_num=@week_num1;
    SET tmp_date1=STR_TO_DATE(date1,'%Y%m%d');
    SET tmp_date2=STR_TO_DATE(startday,'%Y%m%d');
    SET day_num=(DATEDIFF(tmp_date1,tmp_date2)+1);
    IF day_num <=week_num THEN
    SET result=1;
    ELSE
    SET day_num2=day_num-week_num;
    SET result=(CEILING(day_num2/7)+1);
    END IF;
    END IF;
           RETURN result;
    END$$
    DELIMITER ;
    
  • 相关阅读:
    数据库的三大范式以及五大约束
    解析PHP面向对象的三大特征
    php中的数组遍历的几种方式
    PHP中的函数声明与使用
    使用mui框架打开页面的几种不同方式
    JS中精选this关键字的指向规律你记住了吗
    同一功能三种不同实现方式你选哪个
    转!!NPM报错 Error: EPERM: operation not permitted, unlink......解决办法和清除缓存。
    转!!关于http请求 浏览器 中文编码
    CentOS6.5下Apache防止目录遍历
  • 原文地址:https://www.cnblogs.com/janehoo/p/5386267.html
Copyright © 2011-2022 走看看