MYSQL系列-MYSQL基础增强(Myql函数)
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函数)的更多相关文章
- MYSQL系列-Mysql存储引擎选择
MYSQL系列-Mysql存储引擎选择 //查看当前数据库支持的存储引擎 show engines \G; 创建表的时候可以通过engine=MyISAM指定存储引擎 MyISAM: .MYISAM不 ...
- openresty开发系列14--lua基础语法3函数
openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...
- MySQL系列(一)--基础知识(转载)
安装就不说了,网上多得是,我的MySQL是8.0版本,可以参考:CentOS7安装MySQL8.0图文教程和MySQL8.0本地访问设置为远程访问权限 我的MySQL安装在阿里云上面,阿里云向外暴露端 ...
- DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比
随着MySQL数据库的应用越来越广泛,DB2向MySQL数据库的迁移需求也越来越多.进行数据库之间迁移的时候,首先遇到的并且也是最基本最重要的就是两种数据库数据类型之间的转换. 相关阅读: 从商用到开 ...
- MYSQ系列-MYSQL基础增强(Mysql基本语句)
MYSQL基础增强 库操作 创建一个使用UTF-8字符集的数据库: create database mydb character set UTF8; 创建一个带校对集的数据库 create datab ...
- 渣渣小本求职复习之路每天一博客系列——数据库基础(MySQL)(5)
前情回顾:昨天学习了MySQL中索引的设计与使用,还了解了一些常见的SQL注入攻击的手段以及防范方法,一般来说,在面试的时候如果不是要求比较高,基本就够用了. 今天碰见一个拿了TP-LINK的offe ...
- MySQL系列(一)--基础知识大总结
MySQL系列(一)---基础知识大总结 前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里只是作为简单的介绍,但是具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续 ...
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- (2.16)Mysql之SQL基础——函数
(2.16)Mysql之SQL基础——函数 关键词:mysql函数,mysql自定义函数,mysql聚合函数,mysql字符串函数,mysql数值函数 1.自定义函数 -- (1)一般形式 creat ...
随机推荐
- Android Canvas的save(),saveLayer()和restore()浅谈
save() saveLayer() restore() 1.在自定义控件当中你onMeasure和onLayout的工作做完成以后就该绘制该控件了,有时候需要自己在控件上添加一些修饰来满足需求 ...
- ICallbackEventHandler使用
后端:页面需继承ICallbackEventHandler protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack ...
- <select>标签默认值设置
<td> <label>操作类型:</label> <select id="operation_type" class="com ...
- python基础之内置函数(一)
内建函数都在 _builtins_ 里面 (1)abs() 取绝对值 adb(-10) 10 (2)bool()将参数转换成布尔型,返回值是True或False 参数是数字时,0返回False,其他任 ...
- 设置placeholder的样式
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #f00; } ::-moz-placeholder { /* Mozilla Fir ...
- JavaWeb学习笔记(九)—— JSTL标签库
一.JSTL概述 1.1 什么是JSTL JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是 ...
- Macaca,Maven,MVC框架
Macaca:Macaca是阿里开源的一套完整的自动化测试解决方案.同时支持PC和移动端测试,支持的语言有JS,Java,Python. Maven:java,Maven项目对象模型(POM),可以通 ...
- HDU - 1285-确定比赛名次(拓扑排序+优先队列)
有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道 ...
- HDU - 2147 博弈 P/N分析
结论题,很显然和奇偶有关 PS.尝试用dfs写出PN表写崩了 #include<iostream> #include<algorithm> #include<cstdio ...
- HDU - 3336 next运用+递推
题目的匹配应该也要看成一个文本串与另一个模式串的匹配过程 Text是以当前i结尾的后缀来匹配Pattern的前缀(非真) 这里的Pattern肯定是可以匹配成功的,直接由next来保证(next总是当 ...