MySQL 函数 function

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 函数 function相关的知识,希望对你有一定的参考价值。

函数

  • 内置函数function

    • 字符串

      -- 常用函数串操作函数
      set @str = hello中国;
      select @str,length(@str),char_length(@str),character_length(@str),reverse(@str);
      select space(6),repeat(*,10),left(@str,2),mid(@str,2,3),right(@str,3);
      
      select rand(),round(1.5),round(1.2),floor(1.1),floor(1.9),ceil(1.1),ceil(1.9);
      select repeat(*,round(rand()*9+1));
      
      select 5%3,mod(5,3);
      -- 字符串连接
      select concat(hello,mysql,java),concat_ws(--,hello,mysql,java);
      
      -- 会计,法学,美术,计算机科学,计算机网络
      select group_concat(distinct dept) from stu;
      
      -- 会计-法学-美术-计算机科学-计算机网络
      select group_concat(distinct dept separator -) from stu;
      
      select name,group_concat(id order by id desc separator _) from t group by name;
      -- jack 7
      -- andy 6_5_1
      -- mary 4_2
      
      select name,group_concat(id) from stu group by name;
      select name,group_concat(id order by id desc) from stu group by name;
      select name,group_concat(id order by id desc separator _) from stu group by name;
      
      
      -- 字符串替换 hello-mysql
      select replace(hello-java,java,mysql)
      
      -- 检查字符串的位置 7
      select position(java in hello-java);
      -- 3
      select instr(hello,llo);
      -- 0
      select instr(hello,allo);
      
      -- uuid随机字符串,加密
      select uuid(),md5(1),sha(1),sha1(a)
      
      select lower(HELLO),upper(hello);
      
      -- 相当于字符串插入 helljavao
      select insert(hello,5,0,java);
      -- helljava
      select insert(hello,5,1,java) ;
      -- 转换base64字符串 aGVsbG/kuK3lm70=   hello中国
      select to_base64(@str),from_base64(aGVsbG/kuK3lm70=);
      
      
      
      select substr(hello from 3),substring(hello from 3);
      select substring(hello,3);
      select substring(hello from 3);
      select substring(hello,3,1);
      select substring(hello123456,3),substring(hello123456,-3)
      
      -- substring_index() 
      select substring_index(www.mysql.com.cn,.,1);
      select substring_index(www.mysql.com.cn,.,-1);
      select substring_index(www.mysql.com.cn,.,-2);
      
      -- ip 转换函数
      select inet_ntoa(978559132),inet_aton(58.83.160.156)
      select inet_aton(58.83.160.156);
      
      
    • 日期、时间、时间戳相关函数

      -- 日期相关函数
      -- 日期     时间
      select curdate(),current_date(),curtime(),current_time();
      -- 日期时间
      select now(),sysdate(),current_timestamp();
      -- 时间戳
      select unix_timestamp(),from_unixtime(0),from_unixtime(1622018477)
      
      -- 日期时间格式化
      select date_format(curdate(),%Y-%m-%d %H:%i:%s);
      select date_format(now(),%Y-%m-%d %H:%i:%s);
      select from_unixtime(unix_timestamp(),%Y年%m月%d日%H时%i分%s秒);
      select date_format(curdate(),%m月%d日);
      
      select year(2018-2-16),month(curdate()),day(curdate()),date(now()),time(now());
      select hour(curtime()),minute(curtime()),second(curtime());
      
      -- 日期计算
      -- 本月第一天日期 最后一天日期 三天前的日期 5天后日期
      select now(),date_add(now(),interval -3 day),date_add(now(),interval 5 day),date_add(now(),interval -100 hour );
      
      
      -- 计算两个日期有多少天 now() - 2000-1-16
      select to_days(curdate()) - to_days(2000-1-16);
      
      -- 求指定日期的那个月最后一天日期 ,返回日期,没有时分秒
      select last_day(curdate()),last_day(2000-2-4),last_day(now());
      select day(curdate()),dayname(curdate()),dayofmonth(curdate()),dayofweek(curdate()),dayofyear(curdate());
      select concat_ws(-,year(curdate()),month(curdate()),1);
      -- 获取当月第一天日期
      select date_add(curdate(),interval -day(curdate())+1 day);
      
      -- 获取当前月的总天数
      select day(last_day(2021-2-3));
      
      select date_add(curdate()-day(curdate())+1,interval -1 month); -- 获取下个月的第一天
      
      -- date_diff
      select datediff(curdate(),2018-3-15);
      select timestampdiff(day,2018-3-15,curdate())
      select timestampdiff(year,2018-3-15,curdate())
      select timestampdiff(hour,2021-5-25 08:30:50,2021-5-25 18:20:30)
      
      
    • select user(),database(),version(),now();
      
      select * from stu;
      
      -- 查看stu中有多少个专业
      select count(distinct dept) from stu;
      
      select distinct dept from stu;
      
      -- 每个专业的人数
      select dept,count(*) from stu group by dept;
      
      
      select distinct dept from stu order by dept desc;
      select group_concat(distinct dept order by dept desc) from stu;
      set @ss = 计算机网络,计算机科学,美术,法学,会计;
      
      -- 计算机科学,美术,法学
      select substring_index(substring_index(@ss,,,4),,,-3)
      
      select reverse(substring_index(reverse(substring_index(@ss,,,4)),,,3));
      --
      
      select substring_index(group_concat(distinct dept order by dept desc),,,1) from stu;
      
      SELECT SUBSTRING_INDEX(CURRENT_USER(),@,1);
      
      
      select name,group_concat(id) from (
      select id,name from stu  limit 10) ttt group by name;
      
      id name pid
      1 电器   2,3
      
      select group_concat(distinct name order by name desc) from stu;
      
      -- if()  ifnull()
      select if(true,yes,no),ifnull(null,hello),ifnull(a,b);
      
      select id,name,ifnull(gender,保密),if(gender is null,保密,gender) from stu;
      
  • 自定义函数

-- 自定义函数
delimiter $
create function pf(i int)
    returns int
begin
    return i * i;
end$
delimiter ;

-- 查看声明了哪些函数
show function status where Db = wxdb;

select `SPECIFIC_NAME`
from `INFORMATION_SCHEMA`.`ROUTINES`
where `ROUTINE_SCHEMA` = wxdb
  and ROUTINE_TYPE = FUNCTION;

-- 调用函数
select pf(19), pf(2), pf(6);

-- 声明函数 返回等级 >90优秀 >80良好 >60 及格 else 补考
delimiter $$
create function f_level(s int)
    returns varchar(2)
begin
    return if(s >= 90, 优秀, if(s > 80, 良好, if(s >= 60, 及格, 补考)));
end $$
delimiter ;
-- 删除定义的函数
drop function `f_level`;

-- 调用函数
select f_level(90);

-- 在一个表的查询中使用函数
select f_level(score) le, count(*), group_concat(concat_ws(-, id, name))
from stu
group by le;

-- 自定义函数实现 留言动态计算效果
/*
 1 jack helloworld 2021-05-27 10:42:15

 1 jack hellowrld


 */
select uuid(), length(uuid())
create table cf_guestbook
(
    id      char(36)     not null,
    name    varchar(30)  not null,
    msg     varchar(255) not null,
    addtime datetime default now(),
    primary key (id)
);

select *
from cf_guestbook;
insert cf_guestbook
values (uuid(), jack, helloworld, 2021-5-3 18:20:30),
       (uuid(), lisi, 你好呀, 2021-5-27 8:3:50),
       (uuid(), lisi, 在干什么?, now());

-- 声明定义函数
delimiter $
create function f_addtime(t datetime)
    returns varchar(100)
begin
    declare t1 int;
    declare t2 int;
    declare m varchar(30);
    set t1 = unix_timestamp();
    set t2 = unix_timestamp(t);
    if t1 - t2 < 60 then
        set m = 刚刚;
    elseif t1 - t2 < 3600 then
        set m = concat(round((t1 - t2) / 60), 分钟前);
    elseif t1-t2 < (3600*24)  then
        set m = concat(round((t1 - t2) / 3600), 小时前);
    else
        set m = from_unixtime(t2);
    end if;

    return m;
end $
delimiter ;

drop function f_addtime;
select name, msg, f_addtime(addtime)
from cf_guestbook;
-- select unix_timestamp(),unix_timestamp(addtime) from cf_guestbook;

以上是关于MySQL 函数 function的主要内容,如果未能解决你的问题,请参考以下文章

ES6新增语法(四)——面向对象

笨方法学Python3(21-44)

《笨方法学Python》加分题 40 - 42

测验8: 程序设计方法学 (第8周)-单选题

笨方法学Python

笨方法学python--读写文件