• MySQL之函数


    了解编程的人一般都会知道函数的重要性,丰富的函数有的时候可以给我们带来事半功倍的效果,在MySQL中提供了许多的内置函数,能够帮助开发人员编写简单快捷的SQL语句,除了这些内置的函数之外,用户也可以自定义函数,本次博客整理了一下MySQL中常用的函数,简单的介绍了自定函数,MySQL版本mysql-5.7.19。

    常用函数

    1.字符串函数

    字符串函数是最常用的一种函数。下表列出了常用的字符串函数:

    2.数值函数

    MySQL中另外一类就是数值函数了。这些函数可以处理很多数值方面的运算,常见的数值运算函数如下:

     

     3.日期和时间函数

     有的时候们需要了解当前的时间,这时候我们就可以调用时间函数了。下面就是一些常用的时间函数:

     

    下面来说一下DATE_FORMAT(date,format):format可以有以下格式符:

    Specifier    Description
    %a             Abbreviated weekday name (Sun..Sat)
    %b             Abbreviated month name (Jan..Dec)
    %c             Month, numeric (0..12)
    %D             Day of the month with English suffix (0th, 1st, 2nd, 3rd, …)
    %d             Day of the month, numeric (00..31)
    %e             Day of the month, numeric (0..31)
    %f             Microseconds (000000..999999)
    %H             Hour (00..23)
    %h             Hour (01..12)
    %I             Hour (01..12)
    %i             Minutes, numeric (00..59)
    %j             Day of year (001..366)
    %k             Hour (0..23)
    %l             Hour (1..12)
    %M             Month name (January..December)
    %m             Month, numeric (00..12)
    %p             AM or PM
    %r             Time, 12-hour (hh:mm:ss followed by AM or PM)
    %S             Seconds (00..59)
    %s             Seconds (00..59)
    %T             Time, 24-hour (hh:mm:ss)
    %U             Week (00..53), where Sunday is the first day of the week; WEEK() mode 0
    %u             Week (00..53), where Monday is the first day of the week; WEEK() mode 1
    %V             Week (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X
    %v             Week (01..53), where Monday is the first day of the week; WEEK() mode 3; used with %x
    %W             Weekday name (Sunday..Saturday)
    %w             Day of the week (0=Sunday..6=Saturday)
    %X             Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
    %x             Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
    %Y             Year, numeric, four digits
    %y             Year, numeric (two digits)
    %%             A literal % character
    %x             x, for any “x” not listed above
    格式符

    举个例子吧!

    mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
    +------------------------------------------------+
    | DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y') |
    +------------------------------------------------+
    | Sunday October 2009                            |
    +------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT DATE_FORMAT(now(),'%H %k %I %r %T %S %w');
    +-------------------------------------------+
    | DATE_FORMAT(now(),'%H %k %I %r %T %S %w') |
    +-------------------------------------------+
    | 23 23 11 11:49:57 PM 23:49:57 57 5        |
    +-------------------------------------------+
    1 row in set (0.00 sec)

    再来看一下DATE_ADD(date,INTERVAL expr unit):其中INTERVAL是关键字,expr是一个表达式,unit为间隔类型,MySQL提供如下的间隔类型:

    unit Value                 Expected expr Format
    MICROSECOND                 MICROSECONDS
    SECOND                     SECONDS
    MINUTE                     MINUTES
    HOUR                     HOURS
    DAY                         DAYS
    WEEK                     WEEKS
    MONTH                     MONTHS
    QUARTER                     QUARTERS
    YEAR                     YEARS
    SECOND_MICROSECOND         'SECONDS.MICROSECONDS'
    MINUTE_MICROSECOND         'MINUTES:SECONDS.MICROSECONDS'
    MINUTE_SECOND             'MINUTES:SECONDS'
    HOUR_MICROSECOND         'HOURS:MINUTES:SECONDS.MICROSECONDS'
    HOUR_SECOND                 'HOURS:MINUTES:SECONDS'
    HOUR_MINUTE                 'HOURS:MINUTES'
    DAY_MICROSECOND             'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS'
    DAY_SECOND                 'DAYS HOURS:MINUTES:SECONDS'
    DAY_MINUTE                 'DAYS HOURS:MINUTES'
    DAY_HOUR                 'DAYS HOURS'
    YEAR_MONTH                 'YEARS-MONTHS'
    间隔类型

    举个例子吧!

    mysql> SELECT DATE_ADD('2000-12-31 23:59:59',INTERVAL 1 SECOND);
    +---------------------------------------------------+
    | DATE_ADD('2000-12-31 23:59:59',INTERVAL 1 SECOND) |
    +---------------------------------------------------+
    | 2001-01-01 00:00:00                               |
    +---------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT DATE_ADD('2100-12-31 23:59:59',INTERVAL '1:1' MINUTE_SECOND);
    +--------------------------------------------------------------+
    | DATE_ADD('2100-12-31 23:59:59',INTERVAL '1:1' MINUTE_SECOND) |
    +--------------------------------------------------------------+
    | 2101-01-01 00:01:00                                          |
    +--------------------------------------------------------------+
    1 row in set (0.00 sec)

     4.流程函数

     流程函数也是很常用的一类函数,用户可以使用这类函数在一个SQL语句中实现条件选择,这样做能够提高语句的效率。

     举例:

    现在有员工工资表如下:

    mysql> select * from salary;
    +----+---------+
    | id | salary  |
    +----+---------+
    |  1 | 1000.00 |
    |  2 | 2000.00 |
    |  3 | 3000.00 |
    |  4 | 4000.00 |
    |  5 | 5000.00 |
    |  6 | 6000.00 |
    |  7 | 7000.00 |
    |  8 |    NULL |
    +----+---------+
    8 rows in set (0.00 sec)

    (1)当工资高于5000就显示高工资,低于5000的就显示低工资:

    mysql> select id,if(salary>5000,'高工资','低工资') as level from salary;
    +----+-----------+
    | id | level     |
    +----+-----------+
    |  1 | 低工资    |
    |  2 | 低工资    |
    |  3 | 低工资    |
    |  4 | 低工资    |
    |  5 | 低工资    |
    |  6 | 高工资    |
    |  7 | 高工资    |
    |  8 | 低工资    |
    +----+-----------+
    8 rows in set (0.00 sec)
    View Code

    (2)当没有工资的时候,用0代替:

    mysql> select ifnull(salary,0) from salary;
    +------------------+
    | ifnull(salary,0) |
    +------------------+
    |          1000.00 |
    |          2000.00 |
    |          3000.00 |
    |          4000.00 |
    |          5000.00 |
    |          6000.00 |
    |          7000.00 |
    |             0.00 |
    +------------------+
    8 rows in set (0.00 sec)
    View Code

    (3)用case when来实现例子1:

    mysql> select id,case when salary>5000 then '高工资' else '低工资' end from salary;
    +----+-------------------------------------------------------------+
    | id | case when salary>5000 then '高工资' else '低工资' end       |
    +----+-------------------------------------------------------------+
    |  1 | 低工资                                                      |
    |  2 | 低工资                                                      |
    |  3 | 低工资                                                      |
    |  4 | 低工资                                                      |
    |  5 | 低工资                                                      |
    |  6 | 高工资                                                      |
    |  7 | 高工资                                                      |
    |  8 | 低工资                                                      |
    +----+-------------------------------------------------------------+
    8 rows in set (0.00 sec)
    View Code

    (4)当工资是1000的为特低工资,工资为2000的为低工资,其余为高工资:

    mysql> select id,case salary when 1000 then '特低工资' when 2000 then '低工资' else '高工资' end from salary;
    +----+-------------------------------------------------------------------------------------------+
    | id | case salary when 1000 then '特低工资' when 2000 then '低工资' else '高工资' end           |
    +----+-------------------------------------------------------------------------------------------+
    |  1 | 特低工资                                                                                  |
    |  2 | 低工资                                                                                    |
    |  3 | 高工资                                                                                    |
    |  4 | 高工资                                                                                    |
    |  5 | 高工资                                                                                    |
    |  6 | 高工资                                                                                    |
    |  7 | 高工资                                                                                    |
    |  8 | 高工资                                                                                    |
    +----+-------------------------------------------------------------------------------------------+
    8 rows in set (0.00 sec)
    View Code

    5.其他函数

     MySQL内置的函数还有很多,这里就不做一一介绍,具体的可以参考官方的文档,里面也有举了很多的栗子:https://dev.mysql.com/doc/refman/5.7/en/functions.html

     自定义函数

     用户可以自定义函数,语法如下:

    CREATE FUNCTION func_name([parameter1,parameter2...])
        RETURNS type
        runtime_body

    下面就来创建一个函数,比如自定义一个两个整数的加法函数:

    DELIMITER $
    CREATE FUNCTION mysum(n1 INT,n2 INT) RETURNS INT
    BEGIN
     DECLARE num int DEFAULT 0;
     SET num = n1 + n2;
     RETURN(NUM);
    END $
    DELIMITER ;

    执行函数使用SELECT:

    mysql> SELECT mysum(1,2);
    +------------+
    | mysum(1,2) |
    +------------+
    |          3 |
    +------------+
    1 row in set (0.00 sec)

    删除自定函数使用:

    DROP FUNCTION func_name

    比如删除上面创建的函数:

    mysql> drop function mysum;
    Query OK, 0 rows affected (0.00 sec)

    自定义函数暂时写到这里,更详细的会在下一篇博客中和存储过程一起介绍。

  • 相关阅读:
    这是一个关于Latex的测试
    在Mac下配置php开发环境:Apache+php+MySql
    CSS 颜色代码大全
    APP中关于Android和IOS与网页交互
    linux crontab
    dedecms中的内容页中的变量
    lamp中的Oracle数据库链接
    phpcms使用session的方法
    linux系统下nginx安装目录和nginx.conf配置文件目录
    window7+wamp环境配置Oracle数据库连接
  • 原文地址:https://www.cnblogs.com/liubinsh/p/7578684.html
Copyright © 2020-2023  润新知