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