DBA MySQL函数相关

内置函数

数学函数

​ 常用的数学相关函数如下所示:

ROUND(x,y)
# 返回参数x的四舍五入的有y位小数的值
               
RAND()
# 返回参数x的四舍五入的有y位小数的值

聚合函数

​ 常用的聚合函数如下所示:

AVG(col)
# 返回指定列的平均值

COUNT(col)
# 返回指定列中非NULL值的个数

MIN(col)
# 返回指定列的最小值

MAX(col)
# 返回指定列的最大值

SUM(col)
#返回指定列的所有值之和

GROUP_CONCAT(col) 
# 返回由属于一组的列值连接组合而成的结果

字符串函数

​ 常用的字符串函数如下所示:

CHAR_LENGTH(str)
# 返回值为字符串str的长度,长度的单位为字符。一个多字节字符算作一个单字符

CONCAT(str1,str2,...)
# 字符串拼接
# 如有任何一个参数为NULL ,则返回值为NULL
          
CONCAT_WS(separator,str1,str2,...)
# 字符串拼接(自定义连接符)
# CONCAT_WS()不会忽略任何空字符串。(然而会忽略所有的 NULL)

CONV(N,from_base,to_base)
# 进制转换,例如:
# 		SELECT CONV('a',16,2); 表示将a由16进制转换为2进制字符串表示

FORMAT(X,D)
# 将数字X的格式写为'#,###,###.##',以四舍五入的方式保留小数点后D位,并将结果以字符串的形式返回。若D为0, 则返回结果不带有小数点,或不含小数部分
# 例如:
# 		SELECT FORMAT(12332.1,4); 结果为: '12,332.1000'

INSERT(str,pos,len,newstr)
# 在str的指定位置插入字符串
# pos:要替换位置其实位置
# len:替换的长度
# newstr:新字符串
# 特别的:
#		如果pos超过原字符串长度,则返回原字符串
#		如果len超过原字符串长度,则由新字符串完全替换

INSTR(str,substr)
# 返回字符串str中子字符串的第一个出现位置

LEFT(str,len)
# 返回字符串str从开始的len位置的子序列字符

LOWER(str)
# 变小写

UPPER(str)
# 变大写
   
REVERSE(str)
# 返回字符串str,顺序和字符顺序相反
        
SUBSTRING(str,pos)
SUBSTRING(str FROM pos) 
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos FOR len)
# 不带有len参数的格式从字符串str返回一个子字符串,起始于位置pos。
# 带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置pos。
# 使用 FROM的格式为标准SQL语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos字符,而不是字符串的开头位置。在以下格式的函数中可以对pos使用一个负值

M > SELECT SUBSTRING('Quadratically',5);
      'ratically'

M > SELECT SUBSTRING('foobarbar' FROM 4);
      'barbar'

M > SELECT SUBSTRING('Quadratically',5,6);
      'ratica'

M > SELECT SUBSTRING('Sakila', -3);
      'ila'

M > SELECT SUBSTRING('Sakila', -5, 3);
      'aki'

M > SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
      'ki'

日期与时间

​ 常用的日期与时间函数如下所示:

NOW()
# 返回当前的日期和时间

CURDATE()
CURRENT_DATE()
# 返回当前的日期

CURTIME()
CURRENT_TIME()
# 返回当前的时间

DAYOFWEEK(date)
# 返回date所代表的一星期中的第几天(1~7)

DAYOFMONTH(date)
# 返回date是一个月的第几天(1~31)

DAYOFYEAR(date)
# 返回date是一年的第几天(1~366)

DAYNAME(date)
# 返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);

FROM_UNIXTIME(ts,fmt)
# 根据指定的fmt格式,格式化UNIX时间戳ts

HOUR(time)   
# 返回time的小时值(0~23)

MINUTE(time)   
# 返回time的分钟值(0~59)

MONTH(date)   
# 返回date的月份值(1~12)
    
MONTHNAME(date)
# 返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE);

QUARTER(date)
# 返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE);
    
WEEK(date)
# 返回日期date为一年中第几周(0~53)
    
YEAR(date)
# 返回日期date的年份(1000~9999)
    
DATE_FORMAT(date,format) 
# 根据format字符串格式化date值
# 示例演示:
M > SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
   'Sunday October 2009'

M > SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
   '22:23:00'

M > SELECT DATE_FORMAT('1900-10-04 22:23:00','%D %y %a %d %m %b %j');
   '4th 00 Thu 04 10 Oct 277'

M > SELECT DATE_FORMAT('1997-10-04 22:23:00','%H %k %I %r %T %S %w');
   '22 22 10 10:23:00 PM 22:23:00 00 6'

M > SELECT DATE_FORMAT('1999-01-01', '%X %V');
   '1998 52'

M > SELECT DATE_FORMAT('2006-06-00', '%d');
   '00'

加密函数

​ 常用的加密函数如下所示:

MD5()    
# 计算字符串str的MD5校验和

PASSWORD(str)   
# 返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法

控制流函数

​ 控制流函数如下所示:

CASE WHENtest1 THEN result1...ELSE default END
# 如果testN是真,则返回resultN,否则返回default

CASE test WHENval1 THEN result...ELSE defaultEND  
# 如果test和valN相等,则返回resultN,否则返回default

IF(test,t,f)   
# 如果test是真,返回t;否则返回f

IFNULL(arg1,arg2) 
# 如果arg1不是空,返回arg1,否则返回arg2

NULLIF(arg1,arg2) 
# 如果arg1=arg2返回NULL;否则返回arg1

自定义函数

函数与存储过程

​ 自定义函数与存储过程最大的不同点:

​ 函数中不可以写SQL语句(否则会报错),函数仅仅只是一个功能,是一个在SQL中被应用的功能,若要想在BEGIN...END中写SQL语句,请用存储过程。

定义函数

​ 定义函数示例演示如下:

delimiter $
-- 定义参数与返回值
  CREATE FUNCATION f1(
    i1 int,  -- 参数1 int类型
    i2 int   -- 参数2 int类型
  )
  RETURNS int -- 返回一个int
    -- 函数体
  BEGIN
    declare num int;
    set num = i1 + i2;
    return(num);
  END $
delimiter ;

​ 示例演示:

delimiter $
  -- 定义参数与返回值
  CREATE FUNCATION f2(
    i int
  )
  RETURNS int
  -- 函数体
  BEGIN
    declare res int default 0;
    if i = 10 then
      set res=100;
    elseif i = 20 then
      set res=200;
    elseif i = 30 then
      set res=300;
    else
      set res=400;
    end if;
      return res;
  END $
delimiter ;

删除函数

​ 删除自定义函数语法格式如下:

DROP FUNCTION 自定义函数名称;

使用函数

​ 小示例:

# 获取返回值
SELECT UPPER('name') INTO @res;
SELECT @res;

# 在查询中使用
SELECT f1(11,nid) ,name FROM table;
posted @ 2021-02-20 18:32  云崖君  阅读(42)  评论(0编辑  收藏  举报