select char_length(name);如果值为null 返回一个null.值为零是1
2 获取当前日期
select cur_date() //2017-06-12
3 返回当前时间
select curtime();// 10:36:35
3.1 返回当前时间和日期
select now() 2017-06-12 11:37:08
3.2 返回参数中的日期是这一年的第几周
select week('2017-06-12 11:01:08');//24
3.3 返回参数中的时间是哪一年
select year('2017-06-12 11:01:08');//2017
3.4 返回小时
select hour('2017-06-12 11:01:08') //11
3.5 返回第几分钟
select minute('2017-06-12 11:01:08') //1
3.6 返回月份
select month('2017-06-12 11:01:08') //6
3.7 返回英文月份
select MONTHNAME('2017-06-12 11:01:08');//june
3.8 返回一个日期或时间值加上一个时间间隔的时间值
select date_add('2017-06-12 11:01:08',interval 2 minute);//2017-06-12 11:03:08
其中minute 可以换成second(秒) year(年) month(月) 注意都不要加s
(其中2写成-2 就是减去)
3.9 返回一个日期或时间值减去一个时间间隔的时间值
select date_sub('2017-06-12 11:01:08',interval 2 hour);//2017-06-12 09:01:08 (如果2 写成负值 就是加上)
YEAR_MONTH 年和月DAY_HOUR日和小时DAY_MINUTE日和分钟DAY_ SECOND日和秒HOUR_MINUTE小时和分HOUR_SECOND小时和秒MINUTE_SECOND 分钟和秒
select date_sub('2017-06-12 11:01:08',interval '2 2' MINUTE_SECOND)
//2017-06-12 10:59:06
4 返回第一个非空值
select coalesce(null, 1);//1 在一定程度下可以跟ifnull(null,1) 起一样的作用
5 返回几个参数中最大的一个
select greatest(1,3,5)//5 如果值有一个为null 那么其返回值就是null
6 返回几个参数中最小的一个
select least(2,0,-5) //-5 如果值有一个为null 那么其返回值就是null
7 返回二进制
select bin(22) //10110 如果是null 返回null 字符串的返回值 为字符串转化为整型后的返回值
8 字符串连接符
select concat_ws("#","first","second",0,null,"last") //first#second#0#last 如果分割符(第一个参数)为null 整个返回null
9 mysql 变量 设置
set @num1=1,@num2=2,@result = 0;
select @result:=(@num1:=5)+@num2:=3 as a,@num1,@num2,@result
******************************************
*a *@num1 *@num2 * @result *
******************************************
*8 * 5 *3 * 8 *
******************************************
10 存储过程
#创建存储过程
-- delimiter //
--
-- create PROCEDURE get(out result int)
--
-- BEGIN
--
-- select 2 into result ;
--
-- end //
--
-- call get(@temp);
--
-- select @temp;
-- drop procedure get;
11 创建函数
-- create function addAge(age int) returns INT
-- return age + 5;
-- select addAge(5);
12 游标的声明
create procedure statisticStore()
BEGIN
declare c int;
DECLARE n varchar(20);
declare total int default 0;
declare done int DEFAULT false;
declare cur cursor for select name,count from store where name="iphone";
declare continue HANDLER for not found set done = true;
set total = 0;
open cur;
read_loop:LOOP
fetch cur into n,c;
if done THEN
leave read_loop;
end if;
set total = total + c;
end loop;
close cur;
select total;
END;
call StatisticStore()
fetch是获取游标当前指向的数据行,并将指针指向下一行,当游标已经指向最后一行时继续执行会造成游标溢出。
在MySql中,造成游标溢出时会引发mysql预定义的NOT FOUND错误,所以在上面使用下面的代码指定了当引发not found错误时定义一个continue 的事件,指定这个事件发生时修改done变量的值。
declare continue HANDLER for not found set done = true;
12.1 repeat 写法的游标
drop procedure if exists StatisticStore1;
CREATE PROCEDURE StatisticStore1()
BEGIN
declare c int;
declare n varchar(20);
declare total int default 0;
declare done int default false;
declare cur cursor for select name,count from store where name = 'iphone';
declare continue HANDLER for not found set done = true;
set total = 0;
open cur;
fetch cur into n,c;
while(not done) do
set total = total + c;
fetch cur into n,c;
end while;
close cur;
select total;
END;
call StatisticStore1();
12.2 while 写法的游标
drop procedure if exists StatisticStore1;
CREATE PROCEDURE StatisticStore1()
BEGIN
declare c int;
declare n varchar(20);
declare total int default 0;
declare done int default false;
declare cur cursor for select name,count from store where name = 'iphone';
declare continue HANDLER for not found set done = true;
set total = 0;
open cur;
fetch cur into n,c;
while(not done) do
set total = total + c;
fetch cur into n,c;
end while;
close cur;
select total;
END;
call StatisticStore1();
13 ifnull(exp1,exp2) 如果exp1为null 返回exp2 否则返回exp1
14 nullif(exp1,exp2) 如果exp1等于exp2 返回null 否则返回exp1 例子:select nullif("A","a") 返回null 因为A和a转为整数都是0 俩值转换后相等所以返回0
15 isnull(exp1) 如果exp1为null 返回值为1 否则返回0