zoukankan      html  css  js  c++  java
  • (二十一)函数


    函数分为两类:系统函数自定义函数

    任何函数都有返回值,因此,可以函数调用,都是使用 select 调用;


    系统函数

    mysql 中,字符串的基本操作单位是字符,最常见的是字符 ;

    mysql 中,字符起始位从 1 开始计算 ;

    函数名 作用
    substring(str,start,len) 字符串截取(字符为单位,因此,汉字截取不会出现问题)
    char_length(str) 字符长度 ,字符跟字符集没有关系
    length(str) 字节长度
    instr(str,str1) 寻找字符串,返回找到的字符的下标(从1开始),0 表示找不到
    lpad(str,len,padstr) 左填充,将字符串按照某个指定填充方式,填充到指定长度(字符),从左开始填充 ,如果某一次,填充,填超了,则截取填充字符。
    upad(str,len,padstr) 右填充,将字符串按照某个指定填充方式,填充到指定长度(字符) ,从右开始填充
    insert(str,start,len,newStr) 替换字符串,从指定位置开始,让后续的指定长度的字符,替换成目标字符串
    strcmp(str,str1) 字符串比较,小于返回 -1 相等返回 0 ,大于返回 1 ,按照字母顺序比较,Z>A,默认校对集,是无视大小写

    自定义函数

    创建函数的语法

    -- 创建一个函数,不带参数的
    mysql> create function ft1() returns int 
        -> begin 
        -> set @num = 100 ;
        -> return @num ;
        -> end ;
    
    
    
    mysql> -- 创建一个带参数列表的函数,注意顺序, 形参名字 形参类型 ;
        -> create function ft2(id int) returns int 
        -> begin 
        -> set @a = id + 100 ;
        -> return @a ;
        -> end ;
    Query OK, 0 rows affected
    
    
    mysql> create function ft3(id int) returns int 
        -> begin 
        -> set @i = 0 ;
        -> set @res = 0 ;
        -> --循环
        -> while @i < 10 do
        -> -- 循环体
        -> -- mysql 中对变量赋值必须使用 set
        -> set @res = @res + @i ;
        -> -- 改变循环条件
        -> set @i = @i + 1 ;
        -> --结束循环
        -> end while ;
        -> 
    
     -- 改变结束符号
     delimiter $
     create function ft3(id int) returns int 
     begin 
      		 set @i = 0 ;
       		 set @res = 0 ;
      		 --循环
      		 while @i < 10 do
    	  		  -- 循环体
    	  		  -- mysql 中对变量赋值必须使用 set
    	  		  set @res = @res + @i ;
    	   		  -- 改变循环条件
    	   		  set @i = @i + 1 ;
    	     --结束循环
    	     end while ;
    	     -- 返回值
    	     return @res ;
     end
     $  -- 自定义结束符
    delimiter ; 
    

    调用函数,无论是自定义函数还是系统函数,都是用 select

    -- 调用自定义函数
    mysql> select ft1() ;
    +-------+
    | ft1() |
    +-------+
    |   100 |
    +-------+
    1 row in set
    

    自定义的函数是属于库级别的,只能在定义的库中使用 ;


    查看函数

    查看函数的时候,可以查看出所有的自定义函数,包括别的库的自定义函数,但是不能使用 ;

    -- 查看函数语法 ;
    mysql> show function status ;
    +----------+------------+----------+----------------+---------------------+---------------------+---------------+---------+
    | Db       | Name       | Type     | Definer        | Modified            | Created             | Security_type | Comment |
    +----------+------------+----------+----------------+---------------------+---------------------+---------------+---------+
    | database | ft1        | FUNCTION | root@localhost | 2018-11-26 10:18:18 | 2018-11-26 10:18:18 | DEFINER       |         |
    | database | myFunction | FUNCTION | root@localhost | 2018-11-26 10:15:48 | 2018-11-26 10:15:48 | DEFINER       |         |
    +----------+------------+----------+----------------+---------------------+---------------------+---------------+---------+
    2 rows in set
    
    

    修改&删除函数

    函数不可以被修改,只能先删除,再新建 ;

    -- 删除函数,写上函数名即可,不需要带上括号 ;
    mysql> drop function myFunction ; 
    Query OK, 0 rows affected
    
    -- 再次查看,发现函数已经被删除
    mysql> show function status  ;
    +----------+------+----------+----------------+---------------------+---------------------+---------------+---------+
    | Db       | Name | Type     | Definer        | Modified            | Created             | Security_type | Comment |
    +----------+------+----------+----------------+---------------------+---------------------+---------------+---------+
    | database | ft1  | FUNCTION | root@localhost | 2018-11-26 10:18:18 | 2018-11-26 10:18:18 | DEFINER       |         |
    +----------+------+----------+----------------+---------------------+---------------------+---------------+---------+
    1 row in set
    
    
    

    变量作用域

    全局变量可以在任何地方使用; 局部变量只能在函数内部使用 ;

    全部变量:使用 set 关键字定义,使用 @ 标识 ;
    局部变量:使用 declare 关键字声明,没有 @ 标识,所有的局部变量必须在函数体开始之前定义 ;

  • 相关阅读:
    PCB设计流程
    第一次PCB画板实战MiniDVPart1/3
    程序人生
    MCU死掉了
    一花一世界,一码一人生,谓之程序人生
    神船·神舟
    程序猿的选择
    android得到strings.xml文件中的内容
    Android特效 五种Toast详解
    Java字符串转换为日期和时间比较大小
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665624.html
Copyright © 2011-2022 走看看