您的位置:首页 > 其它

存储过程中日期格式的转换

2016-06-03 15:29 260 查看
其实写存储过程就相当于在下写有逻辑的SQL。

存储过程中的时类有:

ADDTIME (date2 ,time_interval ) //将time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区
CURRENT_DATE (  ) //当前日期
CURRENT_TIME (  ) //当前时间
CURRENT_TIMESTAMP (  ) //当前时间戳
DATE (datetime ) //返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间
DATEDIFF (date1 ,date2 ) //两个日期差
DAY (date ) //返回日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(1-7) ,1为星期天
DAYOFYEAR (date ) //一年中的第几天
EXTRACT (interval_name  FROM date ) //从date中提取日期的指定部分
MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) //生成时间串
MONTHNAME (date ) //英文月份名
NOW (  ) //当前时间
SEC_TO_TIME (seconds ) //秒数转成时间
STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示
TIMEDIFF (datetime1 ,datetime2 ) //两个时间差
TIME_TO_SEC (time ) //时间转秒数]
WEEK (date_time [,start_of_week ]) //第几周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第几天
HOUR(datetime) //小时
LAST_DAY(date) //date的月的最后日期
MICROSECOND(datetime) //微秒
MONTH(datetime) //月
MINUTE(datetime) //分

在存储过程中要对字段进行格式化可以使用DATE_FORMAT(字段,格式)函数。

例如:

DELIMITER $$

USE `trshdev_dw_audit`$$

DROP PROCEDURE IF EXISTS `SP_Staff_Info_Frank`$$

CREATE DEFINER=`trshdev_dw_audit`@`%` PROCEDURE `SP_Staff_Info_Frank`()

BEGIN

        DECLARE V_DATE_TO        DATETIME; 
DECLARE V_SP_NAME        VARCHAR(30) DEFAULT 'SP_Plan_Info_Frank';
DECLARE V_TAB_LEVEL      VARCHAR(20);
DECLARE V_LOG_STEP_NO    VARCHAR(20);
DECLARE V_LOG_BEGIN_TIME DATETIME DEFAULT SYSDATE();
DECLARE V_LOG_DESC       VARCHAR(768);
DECLARE V_LOG_ROWCOUNT   INT;
DECLARE V_SP_BEGIN_DATE  DATETIME DEFAULT SYSDATE();
DECLARE V_STEP_DESC      VARCHAR(20);
DECLARE
V_ERR INT;
DECLARE P_OUT_SQLCODE INT DEFAULT 0;
DECLARE P_OUT_ERRMSG VARCHAR(800) DEFAULT 'SUCCESS';

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND SET v_err = 1;

SET  V_LOG_STEP_NO = 'SETP_01';

CALL SP_INSERT_LOG(
V_DATE_TO,
V_SP_NAME,
V_TAB_LEVEL,
V_LOG_STEP_NO,
V_LOG_BEGIN_TIME,
V_LOG_DESC,
V_LOG_ROWCOUNT,
V_SP_BEGIN_DATE,
V_STEP_DESC,
P_OUT_SQLCODE,
P_OUT_ERRMSG
);

TRUNCATE TABLE TRSHDEV_DW_AUDIT.`staff_info`;

CALL SP_UPDATE_LOG(
V_DATE_TO,
V_SP_NAME,
V_TAB_LEVEL,
V_LOG_STEP_NO,
V_LOG_BEGIN_TIME,
V_LOG_DESC,
V_LOG_ROWCOUNT,
V_SP_BEGIN_DATE,
V_STEP_DESC,
P_OUT_SQLCODE,
P_OUT_ERRMSG
);
SET  V_LOG_STEP_NO = 'SETP_01';
CALL SP_INSERT_LOG(
V_DATE_TO,
V_SP_NAME,
V_TAB_LEVEL,
V_LOG_STEP_NO,
V_LOG_BEGIN_TIME,
V_LOG_DESC,
V_LOG_ROWCOUNT,
V_SP_BEGIN_DATE,
V_STEP_DESC,
P_OUT_SQLCODE,
P_OUT_ERRMSG
);

INSERT  TRSHDEV_DW_AUDIT.`staff_info` (

         `Staff_No`,

         `Staff_Name`,

         `Sex`,

         `Id_type`,

         `Idno`,

         `quano`,

         `JoinDate`,

         `LeaveDate`,

         `Edu_Degree`,

         `Accreditation`,

         `Depart_info`,

         `Is_Leader`,

         `Staff_Rank`
)
SELECT 
       A.EMPLOYEE_CODE,   
A.NAME,            
A.GENDER,          
A.CERTI_TYPE,      
A.CERTI_CODE,      
NULL,            
DATE_FORMAT(A.ONBOARD_DATE,'%Y%m%d') AS ONBOARD_DATE,    
       DATE_FORMAT(A.TERMINATION_DATE, '%Y%m%d') AS TERMINATION_DATE,
A.EDUCATION,       
A.TITLE,           
A.ORGAN_ID,        
NULL,            
A.TITLE           
FROM TRSH_DEV.T_EMPLOYEE A; 

COMMIT;
CALL SP_UPDATE_LOG(
V_DATE_TO,
V_SP_NAME,
V_TAB_LEVEL,
V_LOG_STEP_NO,
V_LOG_BEGIN_TIME,
V_LOG_DESC,
V_LOG_ROWCOUNT,
V_SP_BEGIN_DATE,
V_STEP_DESC,
P_OUT_SQLCODE,
P_OUT_ERRMSG
);
IF v_err = 1 THEN
SET v_err = 2;
END IF;

    END$$

DELIMITER ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: