MYSQL 明月三千里-温故知新

1 获取 mysql 字段的值得长度

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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注