MySQL创建日期字典表

项目中,需要用到一张日期字典表,就自己建了一张,代码如下,以作学习交流使用奋斗

创建表:

CREATE TABLE DIC_DATE(
DATE             DATE
,STR_DATE        VARCHAR(16)
,LOCAL_DATE      VARCHAR(16)
,YEAR            INT
,MONTH           INT
,DAY             INT
,DAYOFYEAR       INT
,DAYOFMONTH      INT
,WEEKOFYEAR      INT
,WEEKOFMONTH     INT
,CREATE_DATETIME TIMESTAMP DEFAULT NOW() COMMENT '数据创建日期'
) COMMENT '日期字典表' ;

创建索引:

ALTER TABLE DIC_DATE ADD INDEX INDEX_DIC_DATE_DATE (DATE);
ALTER TABLE DIC_DATE ADD INDEX INDEX_DIC_DATE_STR_DATE (STR_DATE);
ALTER TABLE DIC_DATE ADD INDEX INDEX_DIC_DATE_LOCAL_DATE (LOCAL_DATE);

字段取值测试:

SELECT DATE_FORMAT('2018-01-01','%Y-%m-%d') DATE ;
SELECT CONCAT(DATE_FORMAT('2018-01-01','%Y-%m-%d'),'') STR_DATE ;
SELECT CONCAT(YEAR(DATE_FORMAT('2018-01-01','%Y-%m-%d')),'年',MONTH(DATE_FORMAT('2018-02-01','%Y-%m-%d')),'月',DAY(DATE_FORMAT('2018-01-01','%Y-%m-%d')),'日') LOCAL_DATE;
SELECT YEAR(DATE_FORMAT('2018-01-01','%Y-%m-%d')) YEAR;
SELECT MONTH(DATE_FORMAT('2018-02-01','%Y-%m-%d')) MONTH;
SELECT DAY(DATE_FORMAT('2018-01-01','%Y-%m-%d')) DAY;
SELECT DAYOFYEAR(DATE_FORMAT('2018-01-01','%Y-%m-%d')) DAY_IN_YEAR ;
SELECT DAYOFMONTH(DATE_FORMAT('2018-01-01','%Y-%m-%d')) ;
SELECT WEEKOFYEAR(DATE_FORMAT('2018-01-08','%Y-%m-%d')) ;
SELECT WEEK(DATE_FORMAT('2018-02-05','%Y-%m-%d'), 5) - WEEK(DATE_SUB(DATE_FORMAT('2018-02-05','%Y-%m-%d'), INTERVAL DAYOFMONTH(DATE_FORMAT('2018-02-05','%Y-%m-%d')) - 1 DAY), 5) + 1 ;

创建存储过程(注意修改自己对应的数据库库名,不然会报错哦):

DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    PROCEDURE `test`.`PRO_DATE_TABLE`()
    /*LANGUAGE SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    | COMMENT 'string'*/
    BEGIN
	DECLARE V_START_DATE   DATE  DEFAULT DATE_FORMAT('2018-01-01','%Y-%m-%d');
	WHILE V_START_DATE <= DATE_FORMAT('2025-12-31','%Y-%m-%d') DO
       INSERT INTO DIC_DATE(
			   DATE          
			   ,STR_DATE     
			   ,LOCAL_DATE   
			   ,YEAR         
			   ,MONTH        
			   ,DAY          
			   ,DAYOFYEAR  
			   ,DAYOFMONTH 
			   ,WEEKOFYEAR 
			   ,WEEKOFMONTH
       )SELECT V_START_DATE                       DATE 
               ,CONCAT(V_START_DATE,'')           STR_DATE 
               ,CONCAT(YEAR(V_START_DATE)  ,'年'
       		           ,MONTH(V_START_DATE),'月'
       			       ,DAY(V_START_DATE)  ,'日') LOCAL_DATE
               ,YEAR(V_START_DATE)                YEAR
               ,MONTH(V_START_DATE)               MONTH
               ,DAY(V_START_DATE)                 DAY
               ,DAYOFYEAR(V_START_DATE)           DAYOFYEAR 
               ,DAYOFMONTH(V_START_DATE)          DAYOFMONTH
               ,WEEKOFYEAR(V_START_DATE)          WEEKOFYEAR
               ,WEEK(V_START_DATE, 5)- WEEK(DATE_SUB(V_START_DATE, INTERVAL DAYOFMONTH(V_START_DATE) - 1 DAY), 5) + 1 WEEKOFMONTH
          FROM DUAL;
          SET V_START_DATE = DATE_ADD(V_START_DATE,INTERVAL 1 DAY) ;
	END WHILE;
    END$$

DELIMITER ;

运行:

CALL PRO_DATE_TABLE();

猜你喜欢

转载自blog.csdn.net/sinat_37167645/article/details/80061413