MYSQL基础增强(Myql函数)

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

字符串函数:

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

控制流函数:

CASE:
CASE 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,''),(2,70,''),(3,80,''),(4,null,''),(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

MYSQL系列-MYSQL基础增强(Myql函数)的更多相关文章

  1. MYSQL系列-Mysql存储引擎选择

    MYSQL系列-Mysql存储引擎选择 //查看当前数据库支持的存储引擎 show engines \G; 创建表的时候可以通过engine=MyISAM指定存储引擎 MyISAM: .MYISAM不 ...

  2. openresty开发系列14--lua基础语法3函数

    openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...

  3. MySQL系列(一)--基础知识(转载)

    安装就不说了,网上多得是,我的MySQL是8.0版本,可以参考:CentOS7安装MySQL8.0图文教程和MySQL8.0本地访问设置为远程访问权限 我的MySQL安装在阿里云上面,阿里云向外暴露端 ...

  4. DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比

    随着MySQL数据库的应用越来越广泛,DB2向MySQL数据库的迁移需求也越来越多.进行数据库之间迁移的时候,首先遇到的并且也是最基本最重要的就是两种数据库数据类型之间的转换. 相关阅读: 从商用到开 ...

  5. MYSQ系列-MYSQL基础增强(Mysql基本语句)

    MYSQL基础增强 库操作 创建一个使用UTF-8字符集的数据库: create database mydb character set UTF8; 创建一个带校对集的数据库 create datab ...

  6. 渣渣小本求职复习之路每天一博客系列——数据库基础(MySQL)(5)

    前情回顾:昨天学习了MySQL中索引的设计与使用,还了解了一些常见的SQL注入攻击的手段以及防范方法,一般来说,在面试的时候如果不是要求比较高,基本就够用了. 今天碰见一个拿了TP-LINK的offe ...

  7. MySQL系列(一)--基础知识大总结

    MySQL系列(一)---基础知识大总结 前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里只是作为简单的介绍,但是具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续 ...

  8. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  9. (2.16)Mysql之SQL基础——函数

    (2.16)Mysql之SQL基础——函数 关键词:mysql函数,mysql自定义函数,mysql聚合函数,mysql字符串函数,mysql数值函数 1.自定义函数 -- (1)一般形式 creat ...

随机推荐

  1. HTML5+CSS3从入门到精通 中文pdf版​

    HTML5+CSS3从入门到精通是通过基础知识+中小实例+综合案例的方式,讲述了用HTML5+ CSS3设计构建网站的必备知识,相对于专业指南.高级程序设计.开发指南同类图书,本书是一本适合快速入手的 ...

  2. IOException while loading persisted sessions: java.io.EOFException

    运行eclipse启动服务器的时候,出现了IOException while loading persisted sessions: java.io.EOFException报错.本以为是代码修改出现 ...

  3. C# Socket通信改进记录

    1. Socket 使用原始Socket,Send和Recv方法 进行发送和消息获取.(另起后台线程 不停获取和发送) public void RecvMsg() { //receive messag ...

  4. 个人JS体系整理(三)

    一. 严格模式 JavaScript 严格模式(strict mode)即在严格的条件下运行.首先声明,严格模式是ES5中提出来的,准确来说就是一句指令Use strict,它的目的是指定代码在严格条 ...

  5. 【ExecutorService】概述

    初试 今天做一个上传excel,后台异步导入数据功能,使用ExecutorService private final ExecutorService m_longPollingService; pub ...

  6. 用Hadoop,还是不用Hadoop?

    本文由 伯乐在线 - Lex Lian 翻译.英文出处:Anand Krishnaswamy.欢迎加入翻译小组. Hadoop通常被认定是能够帮助你解决所有问题的唯一方案. 当人们提到“大数据”或是“ ...

  7. Sublime的一些问题记录

    1.默认的中文字体显示异常(参考:关于最新版的Sublime Text 3中默认的中文字体样式显示异常的问题) 1. 选择Perferences(首选项)--> settings(设置) 2. ...

  8. opencv学习笔记1

    #对图像的像素处理#法1print("------------------------")image = cv.imread("D:/1.jpeg",cv.IM ...

  9. CBoard 视图中的拖拽实现

    CBoard中拖拽的功能其实引用了 github的angular-drag-and-drop-lists控件来实现的. 在html页面中引用 div引用dnd-inserted属性 Cboard 系列 ...

  10. ansible基本模块-shell

    ansible  XXX  -m shell -a   "XXX"