存储过程基本语法–运算符
(1)算术运算符
加 set @var1=2+2;
减 set @var2=3-2;
乘 set @var3=3*2;
除 set @var4=10/3;
整除 set @var5=10 div 3;
取模 set @var6=10%3;
(2)比较运算符
大于 >
小于 <
小于等于 <=
大于等于 >=
在两值之间 BETWEEN…AND
例如:
5 BETWEEN1 AND10 (成立)
不在两值之间 not between…and
例如:
5 NOT BETWEEN 1 AND10 (不成立)
在集合中 in
例如:
5 IN (1,2,3,4,) (不成立)
不在集合中 not in
例如:
5 NOT IN (1,2,3,4) (成立)
等于 =
不等于 <>, !=
严格比较两个NULL值是否相等 <=>
简单模式匹配 LIKE
例如:
“Guy Harrison” LIKE “Guy%” (成立)
为空 IS NULL
不为空 IS NOT NULL
比较运算符中比较的结果如果是1的话就表示成立,反之,为0就是不成立。
(3)逻辑运算符
或 ||
与 &&
非 ~(单目运算,按位取反)
简单示例如下:
(4)位运算符
左移位 <<
右移位 >>
存储过程基本语法–分支语句
(1)if语句
delimiter //
create procedure pro_judge(in a int)
begin
if a<20 then
select ‘小于20’;
elseif a>20 then
select ‘大于20’;
else
select ‘等于20’;
end if;
end//
delimiter ;
(2)case语句
delimiter //
create procedure pro_case(in v int)
begin
case v
when 0 then
select ‘去西安’;
when 1 then
select ‘去南京’;
else
select ‘哪儿都不去’;
end case;
end //
delimiter ;
存储过程基本语法–循环语句
(1)while语句
while…end while
while 条件 do
–循环体
end while
实例:
delimiter //
create procedure pro_while()
begin
declare v int;
set v=0;
while v<6 do
select v;
set v=v+1;
end while;
end //
delimiter ;
(2)repeat语句
repeat…end repea
repeat
–循环体
until 循环条件
end repeat;
实例:
delimiter //
create procedure pro_repeat()
begin
declare v int;
set v=0;
repeat
select concat(‘第’,v,‘个数’);
set v=v+1;
until v>6
end repeat;
end //
delimiter ;
(3)loop-leave语句
loop循环不需要初始条件,这点和while相似,同时和repeat循环一样不需要结束条件leave语句的意义是离开循环。
delimiter //
create procedure pro_loop()
begin
declare v int;
set v=0;
loopA:loop
select v;
set v=v+1;
if v>5 then
leave loopA;
end if;
end loop;
end //
delimiter ;
(4)leave,iterate(leave相当于其他语言中的break跳出循环,iterate相当于continue继续循环)
delimiter //
create procedure pro_loop()
begin
declare v int;
set v=0;
loopA:loop
set v=v+1;
if v>5 then
leave loopA;
end if;
if v=3 then
iterate loopA;
end if;
select v;
end loop;
end //
delimiter ;
函数–字符串函数
(1)字符串拼接
concat(str1,str2,…)
实例:
set @a=0;
select concat(‘第’,@a:=@a+1,‘本书:’,title) (as ‘标题’ )from books;
如果感觉显示的标题不美观,可以as一下。
(2)字符串查找
instr(string,substring) 这里的下表是从一开始的,不是从零开始。
实例:
select instr(‘sdfsfs’,‘4’); 一是代表有,0是代表没有。
select * from books where instr(title,‘宋’)>0;
locate(substring,string,startPoint) 同instr,但可以指定开始位置,一个汉字算两个字符
实例:
select * from contents where locate(‘唐’,content,3)>1;
(3)字符串去空格
trim(string) 去除前后端空格
实例:
select trim(’ aa bb cc ');
(4)字符串格截取
left(string,length) 截取开头开始指定长度的字符串。
实例:
select id,ctitle,left(content,6) from contents;
select id,ctitle,concat(left(content,6),’…’) from contents;
实现如下效果:
函数–数学函数
(1)取模,求指数,开方
取余:select mod(10,3);
求指数: select power(4,2);
平方根:select sqrt(16);或者:select power(4,1/2);
(2)取整,绝对值,随机数
取整:
select ceiling(3.1); 向上取整
select floor(3.9); 向下取整
select round(3.5); 四舍五入
绝对值:
select abs(-5);
随机数:
select rand();
select floor(3+rand()*(9-3+1));
(3)千分位、保留n位有效数字
格式化:
select format(62.732839,2) 保留两位有效数字
千分位:当数字整数部分超过4位时,自动进行千分位
select format(12345678.12344,4);
select foramt(6210.732839,2);
以上语句具体到查询表中时:
就是把放数字的地方改成字段值,括号后边放上from 表名
例如:
select format(price,1) from books;
函数–日期函数
(1)系统函数
select sysdate(); 系统时间
select current_date(); 当前日期
select current_time(); 当前时间
select current_timestamp(); 当前时间戳
select date(current_timestamp()); 返回时间的日期部分
实例:
select id,date(updtime) from admins;
时间格式化:
select date_format(updtime,’%Y年%m月%d日 %H:%i:%s’) from admins;
(2)日期转换函数
转成星期几:
select concat(‘星期’,dayofweek(updtime)) from admins;
select date_add(updtime,interval 2 day) from admins; 加上两天
select date_add(updtime,interval 1 hour) from admins; 加上1小时
select date_sub(updtime,interval 3 minute) from admins; 减少3分钟
(3)时间转换函数
(4)日期计算
select id,datediff(updtime,createtime) from admins; 两者日期差
select id,timediff(updtime,createtime) from admins; 两者时间差