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 ;
    
  • 相关阅读:
    sqlhelper使用指南
    大三学长带我学习JAVA。作业1. 第1讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行 大三学长带我学习JAVA。作业1.
    pku1201 Intervals
    hdu 1364 king
    pku 3268 Silver Cow Party
    pku 3169 Layout
    hdu 2680 Choose the best route
    hdu 2983
    pku 1716 Integer Intervals
    pku 2387 Til the Cows Come Home
  • 原文地址:https://www.cnblogs.com/janehoo/p/5386267.html
Copyright © 2011-2022 走看看