12内建函数

一、数学函数

    ROUND(x,y)
        返回参数x的四舍五入的有y位小数的值
        
    RAND()
        返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
     这是一个伪随机数

 

二、聚合函数

    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)。

    FORMAT(X,D)
        将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若  D 为 0, 则返回结果不带有小数点,或不含小数部分。
        例如:
            SELECT FORMAT(12332.1,4); 结果为: '12,332.1000'
    
    INSERT(str,pos,len,newstr)
        在str的指定位置插入字符串
            pos:要替换位置其实位置
            len:替换的长度
            newstr:新字符串
        例如:
            SELECT INSERT('abcd',1,2,'tt'); 结果为: 'ttcd'
            SELECT INSERT('abcd',1,4,'tt'); 结果为: 'tt'
        特别的:
            如果pos超过原字符串长度,则返回原字符串
            如果len超过原字符串长度,则由新字符串完全替换
    
    INSTR(str,substr)
        返回字符串 str 中子字符串的第一个出现位置。

    LEFT(str,len)
        返回字符串str 从开始的len位置的子序列字符。
        例如:
            SELECT INSTR('abc','c'); 结果为: 3
            SELECT INSTR('abc','d'); 结果为: 0
            
    LOWER(str)
        变小写

    UPPER(str)
        变大写
   
    REVERSE(str)
        返回字符串 str ,顺序和字符顺序相反。
        例如:
            SELECT REVERSE('1234567') 结果为:7654321
            
    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 使用一个负值。

        mysql> SELECT SUBSTRING('Quadratically',5); -- 从第5位开始截取
            -> 'ratically'

        mysql> SELECT SUBSTRING('foobarbar' FROM 4); -- 从第4位开始截取
            -> 'barbar'

        mysql> SELECT SUBSTRING('Quadratically',5,6); --从第5位开始截取,截取6个长度
            -> 'ratica'

        mysql> SELECT SUBSTRING('Sakila', -3);    -- 从倒数第3位开始截取
            -> 'ila'

        mysql> SELECT SUBSTRING('Sakila', -5, 3); -- 从倒数第5位开始截取,截取3个长度
            -> 'aki'

 

四、时间和日期函数

   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);
    NOW()    返回当前的日期和时间
    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值

       mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
        -> 'Sunday October 2009'
       mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
        -> '22:23:00'

 

五、加密函数

   MD5()    
        计算字符串str的MD5校验和
        例如:
            SELECT MD5('1234') 结果为:81dc9bdb52d04dc20036dbd8313ed055
    PASSWORD(str)   
        返回字符串str的加密版本,这个加密过程是不可逆转的
        例如:
            SELECT PASSWORD('1234') 结果为:*A4B6157319038724E3560894F7F932C8886EBFCF

 

六、控制流函数

 

  CASE WHEN[test1] THEN [result1]...ELSE [default] END
        如果testN是真,则返回resultN,否则返回default
  CASE [test] WHEN[val1] THEN [result]...ELSE [default]END  
        如果test和valN相等,则返回resultN,否则返回default

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

  IFNULL(arg1,arg2) 
        如果arg1不是空,返回arg1,否则返回arg2
        例如:
            SELECT IFNULL('bbb','abc'); 结果为: bbb
            SELECT IFNULL(null,'abc');  结果为: abc

 

 

自定义函数

CREATE FUNCTION f1(x INT,y INT)
RETURNS INT
BEGIN
    DECLARE sum INT DEFAULT 0;
    SET sum=x+y;
    RETURN(sum);
END

 

使用函数

SELECT f1(100,2);

 

删除函数

DROP FUNCTION f1;

 

posted @ 2019-02-06 18:06  余火灬  阅读(157)  评论(0编辑  收藏  举报