zoukankan      html  css  js  c++  java
  • MYSQL系列-MYSQL基础增强(Myql函数)

    MYSQL基础增强(Myql函数)

    在这里只介绍一些常用的,比较新颖的:

    字符串函数:

     1 CONCAT//字符串连接函数
     2 mysql> SELECT CONCAT('My', 'S', 'QL');
     3         -> 'MySQL'
     4 mysql> SELECT CONCAT('My', NULL, 'QL');//与null连接会变null
     5         -> NULL
     6 mysql> SELECT CONCAT(14.3);
     7         -> '14.3'
     8 
     9 CONCAT_WS//含分隔符的字符串连接
    10 mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name');
    11         -> 'First name,Second name,Last Name'
    12 mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name');
    13         -> 'First name,Last Name'
    14 
    15 LOWER(str)/UPPER(str) //把字符串转换成小写或者大写
    16 LEFT(str,x)/RIGHT(str,x) //返回字符串最左边的x个字符和最右边的x个字符
    17 SUBSTRING(str,x,y) //对给定字符串进行提取x位置往后的y个字符
    18 mysql> select substring('I love mysql',8,4);
    19        -> ‘mysql’
    20 
    21 find_in_set(str,strList)//实现如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。strList是被‘,’分隔的字符串组成的。
    22 例1:
    23 create table books(
    24     bookid int primary key not null auto_increment 
    25 
    26 comment '用户id',
    27     bookname varchar(50) not null,
    28     sort varchar(100)    
    29 );
    30 insert into books(bookid,bookname,sort) values
    31 (1,'大学英语','english,teach'),
    32 (2,'C语言','language,c,old'),
    33 (3,'高等数学','teach,olding');
    34 select bookid,bookname from books where find_in_set('teach',sort);//其中sort是book表的列
    35 
    36 mysql> SELECT LENGTH('text');//返回str的长度
    37         -> 4

    数值函数:

    函数功能
    ABS(x) 返回x的绝对值
    CEIL(x) 向上取整
    FLOOR(x) 向下取整
    MOD(x,y) 返回x/y的模
    RAND() 返回0-1之间的随机数
    ROUND(x,y) 返回参数x的四舍五入的有y位小数的值
    TRUNCATE(x,y) 返回x截断为y位小数的结果
    PI();
    mysql> SELECT PI();
            -> 3.141593
    mysql> SELECT PI()+0.000000000000000000;
            -> 3.141592653589793116
    5.7数值函数地址:http://dev.mysql.com/doc/refman/5.7/en/mathematical-functions.html#function_abs

    控制流函数:

    CASECASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END
    CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
    第一种版本:返回 result 当value=compare_value   result
    第二种版本:返回 result 当condition为真时。
    返回的数据类型依赖于你使用的数据类型
    例如:
    mysql> SELECT CASE 1 WHEN 1 THEN 'one'
        ->     WHEN 2 THEN 'two' ELSE 'more' END;
            -> 'one'  //1=1所以输出one
    mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
            -> 'true' //1>0位真所以输出true
    mysql> SELECT CASE BINARY 'B'
        ->     WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
            -> NULL  
    
    IF(str1,str2,str3):
    mysql> SELECT IF(1<2,'yes','no');
            -> 'yes'
    
    IFNUll(str1,str2)
    
    mysql> SELECT IFNULL(1,0);
            -> 1
    mysql> SELECT IFNULL(NULL,10);
            -> 10
    mysql> SELECT IFNULL(1/0,10);
            -> 10
    mysql> SELECT IFNULL(1/0,'yes');
            -> 'yes'
    
    NULL IF(str1,str2):
    如果str1==str2返回NULL,否则返回str1,跟CASE when str1=str2 THEN NULL ELSE str1 end 相似。
    
    mysql> SELECT NULLIF(1,1);
            -> NULL
    mysql> SELECT NULLIF(1,2);
            -> 1
    注意:在连接操作不要这么使用 IFNULL(a.col,1) = IFNULL(b.col,1) 
    
    下面通过一个例子来说明流程函数的应用:
    假设每个学生都会有高数成绩,和英语成绩。新建一个表如下:(避免乱码尽量不适用中文)
    create table students(
    sid
    int,
    _math
    decimal(9,2),
    english
    varchar(3)
    ); 插入测试数据:
    insert into students values(1,50,'50'),(2,70,'70'),(3,80,'80'),(4,null,'80'),(5,80,null),(6,null,null); mysql> select * from students; +---------+----------+-------------+ |   sid |   _math |   english | +---------+----------+-------------+ | 1 | 50.00 | 50 | | 2 | 70.00 | 70 | | 3 | 80.00 | 80 | | 4 | NULL | 80 | | 5 | 80.00 | NULL | | 6 | NULL | NULL | +---------+----------+-------------+ 案例1:使用CASE将成绩分级 mysql> select case when _math<60 then 'unpass' else 'pass' end result from students; +--------+ | result | +--------+ | unpass | | pass | | pass | | pass | | pass | | pass | +--------+ mysql> select case _math when 80 then '优秀' when 70 then '合格' else '不合格' end result from students; +--------+ | result | +--------+ | 不合格 | | 合格 | | 优秀 | | 不合格 | | 优秀 | | 不合格 | +--------+ 案例2:查询students表,将数学成绩超过60分的学生用pass表示,未超过60分的用unpass表示。 mysql> select IF(_math>=60,'pass','unpass') result from students; +--------+ | result | +--------+ | unpass | | pass | | pass | | unpass | | pass | | unpass | +--------+ 从上面这个例子可以看出它默认统计了NULL值。 案例3:NULL值用0代替 mysql> select ifnull(_math,0) from students; +-----------------+ | ifnull(_math,0) | +-----------------+ | 50.00 | | 70.00 | | 80.00 | | 0.00 | | 80.00 | | 0.00 | +-----------------+

     其他常用函数

    函数功能
    DATABASE() 返回当前数据库名称
    MD5() 返回str的md5值
    USER() 返回当前登录用户名
    INET_ATON() 返回IP地址的数字表示
    INET_NTOA() 返回数字表示的ip地址
    PASSWORD(str) 加密str
    VERSION() 返回当当前数据库的版本
    注意:
    PASSWORD()函数只能用来设置系统用户的密码,不能对应用数据进行加密,如果想对数据进行加密可使用MD5()。
    mysql> select version(); +-----------+ | version() | +-----------+ | 5.7.3-m13 | +-----------+ mysql> select DATABASE(); +------------+ | DATABASE() | +------------+ | liuning | +------------+ mysql> select INET_ATON("192.168.3.100"); +----------------------------+ | INET_ATON("192.168.3.100") | +----------------------------+ | 3232236388 | +----------------------------+ INET_ATON()函数可以实现ip地址的比较: 案例1: mysql> select * from t1; +------+--------------+ | id | ip | +------+--------------+ | 1 | 192.168.1.1 | | 2 | 192.168.1.3 | | 3 | 192.168.1.10 | | 4 | 192.168.1.13 | | 5 | 192.168.1.20 | | 6 | 192.168.1.30 | +------+--------------+ mysql> select * from t1 where ip >= '192.168.1.3' and ip <= '192.168.1.20'; Empty set (0.00 sec) mysql> select * from t1 where inet_aton(ip)>=inet_aton('192.168.1.3') and inet_aton(ip)<= inet_aton('192.168.1.20'); +------+--------------+ | id | ip | +------+--------------+ | 2 | 192.168.1.3 | | 3 | 192.168.1.10 | | 4 | 192.168.1.13 | | 5 | 192.168.1.20 | +------+--------------+

    相关网址:

    Mysql5.7控制流函数地址:http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#operator_case
    Mysql5.x手册 http://doc.mysql.cn/
    Mysql官网 http://dev.mysql.com/
    Mysql5.7参考手册 http://dev.mysql.com/doc/refman/5.7/en/
    其他参考手册
    CSDN-Mysql知识库

    author: liuning

  • 相关阅读:
    EasyUi TreeGrid封装
    Ionic项目中使用极光推送
    Win7搭建NodeJs开发环境
    NET 平台下的插件化开发内核
    访问数据库时如何解决并发问题
    async & await 的前世今生
    Linux环境编程相关的文章
    C# 5.0 Async函数的提示和技巧
    python算法题
    如何从数组中随机取出多个不重复的项
  • 原文地址:https://www.cnblogs.com/liun1994/p/5518010.html
Copyright © 2011-2022 走看看