其实写存储过程就相当于在下写有逻辑的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 ;

其实写存储过程就相当于在下写有逻辑的SQL。存储过程中的时类有:ADDTIME (date2 ,time_interval ) //将time_interval加到date2CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区CURRENT_DATE (  ) //当前日期CURRENT_TIME (  ) //当前时间CURRENT_T 时间 格式 转换 时间 格式 专时间戳:CreateTime2 = UNIX_TIMESTAMP(CreateTime1); 时间戳 时间 格式 :FROM_UNIXTIME(invest_time,'%Y年%m月%d'); 后退3分钟时间 :SET min_time = DATE _SUB(CreateTime1,INTERVAL '3' MINUTE); 现在的时间:save_time =... 数据库时间 日期 常见存储 类型 ,取出三者后,到后端或者前端均是字符串 类型 【其实在数据表 存储也是字符 类型 ,不过是有固定 格式 约束的字符罢了】, 也均可以使用int 类型 存储,使用代码二次 转换 【TBD】 2.应用场景 存储数据到数据表时,选定字段 类型 , 如何选取合适的时间 类型 是必要的,已经时间 类型 确定,需要 转换 为合适的字段 类型 也是在所难免。 设计数据表时, 设...
存储过程 使用 date 日期 类型 的参数,需要定义 日期 类型 date 的变量重新赋值一次,赋值的 过程 貌似会做一次 转换 ,之后才能正常使用,不然使用这个 日期 查询结果不准确,经常会得到无效的结果。 CREATE OR REPLACE PROCEDURE PROC_SITM_EFFECT_SP(BEGIN_ DATE DATE ,
假设从某程序 传输Time数据给数据库db的 存储过程 proc_Name, 存储过程 执行插表操作,将数据@time插入表Table 作为Time字段( 类型 也为 date time)的值。 用到的 日期 格式 转换 方法 :select CONVERT(varchar, get date (), 120 ) 成 2016-08-16 12:34:56 格式 USE [db] SET ANSI
-> 2. 1 数据库存储时间 date time 类型 显示年月日 时分秒 接收的pojo 使用 java.util. Date 接收 不要使用java. sql. Date -> 直接报错 -> 2.2 这个时候 返回的数据是 不想要怎么办 解决办法 1. 后端解决 加入一个注解 时间再次 化 获取年月日 时分秒 1. 为什么要使用 存储过程 通过把处理封装在容易使用的单元 ,简化复杂的操作(正如前面...
Select CONVERT(varchar(100), GET DATE (), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), GET DATE (), 1): 05/16/06 Select CONVERT(varchar(100), GET DATE (), 2): 06.05.16 Select CONVERT(varchar(100), GE...