mysql写存储过程的一些注意事项以及mysql的一些函数

存储过程

drop procedure if exists proll;

DELIMITER ;;


create procedure proll(curDate varchar(20))
begin
	declare startTime varchar(20);
	declare endTime varchar(20);
	declare nextDate varchar(20);
	declare num int;
	drop table tmpTable; -- 删除临时表
	create temporary table if not exists tmpTable  -- 不存在则创建临时表  
         (  
           time varchar(1024),  
           num int 
         );
         truncate TABLE tmpTable;  -- 使用前先清空临时表。
	 
	
	set startTime=str_to_date(curDate,'%Y-%m-%d %H:%i:%s');
	set nextDate=DATE_ADD(str_to_date(curDate,'%Y-%m-%d %H:%i:%s'),INTERVAL 1 day);
	-- select nextDate;
	
	while timestampdiff(hour,startTime,date_format(nextDate,'%Y-%m-%d %H:%i:%s'))>0   do
		set endTime=DATE_ADD(str_to_date(startTime,'%Y-%m-%d %H:%i:%s'),INTERVAL 1 hour);
		insert into tmpTable 
		select concat(startTime,'-',endTime) as time,count(*) as num from logoperationentry where unix_timestamp(createTime)>=unix_timestamp(startTime) and unix_timestamp(createTime)<unix_timestamp(endTime);
		set startTime=endTime;
	end while;
   select * from tmpTable;
end;

;;
DELIMITER ;

call proll('2017-7-25 00:00:00');


以下是一些注意事项

1、DELIMITER是用于定义mysql的执行结束符,因为mysql默认以“;”逗号为执行结束符。如果你不希望mysql遇到逗号当作一个语句执行,则需要用到DELIMITER来定义执行结束符,让mysql一次性执行N行sql语句。

2、mysql要养成良好习惯,每行sql语句都加逗号,不然也会引起语法报错


3、declare关键字只能用于存储过程中,普通sql语句需要定义变量,直接set a=1,即可。但是在存储过程中,必须用declare定义变量,这个跟微软的mssql不同。微软是所有变量定义都需要关键字declare来声明。而mysql如果非存储过程中,变量不需定义,直接set,存储过程中必须declare声明


4、日期加减函数

DATE_ADD(date,INTERVAL expr type) 


DATE_SUB(date,INTERVAL expr type) 


ADDDATE(date,INTERVAL expr type) 


SUBDATE(date,INTERVAL expr type)

date_add与adddate是一样的,同理date_sub与subdate一样

用法:date_add(now(),interval 1 day)      增加一天


5、字符串转换成日期str_to_date(str,'%Y-%m-%d %H:%i:%s')


6、日期转换字符串date_format(date,'%Y-%m-%d %H:%i:%s')


7、日期比较最好先把日期转换成时间戳,因为时间戳是整型unix_timestamp(),参数可以是日期类型,也可以使日期格式字符串

      时间戳直接可以用>、<、=操作


8、日期比较函数TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2),返回两日期之差

返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差。其结果的单位由interval 参数给出。该参数必须是以下值的其中一个:


FRAC_SECOND。表示间隔是毫秒

SECOND。秒

MINUTE。分钟

HOUR。小时

DAY。天

WEEK。星期

MONTH。月

QUARTER。季度

YEAR。年

使用如下:

mysql> select TIMESTAMPDIFF(day,'2012-08-24','2012-08-30');
+----------------------------------------------+
| TIMESTAMPDIFF(day,'2012-08-24','2012-08-30') |
+----------------------------------------------+
|                                            6 | 
+----------------------------------------------+
1 row in set (0.00 sec)


9、TIMESTAMPADD(interval,int_expr,datetime_expr)

语法:

TIMESTAMPADD(interval,int_expr,datetime_expr)


说明:

将整型表达式int_expr 添加到日期或日期时间表达式 datetime_expr中。式中的interval和上文中列举的取值是一样的。

mysql> select TIMESTAMPADD(MINUTE,8820,'2012-08-24 09:00:00');  
+-------------------------------------------------+  
| TIMESTAMPADD(MINUTE,8820,'2012-08-24 09:00:00') |  
+-------------------------------------------------+  
| 2012-08-30 12:00:00                             |   
+-------------------------------------------------+  
1 row in set (0.00 sec) 



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值