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 ...
随机推荐
- MessageBox.Show() 多重用法
MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBox.Show (IWin32Window, S ...
- SQL Server 根据关键字和结束符提取字符串子串
/* @info-待截取的字符串 @indexStr-截取子串的起始字符串 @split-截取子串的结束符号 列入依次传入 胸片:正常.心电图:异常,需要注意.血常规检查:正常. 心电图 '.' 返回 ...
- Socket 简易静态服务器 WPF MVVM模式(二)
command类 标准来说,command会有三种模式,委托命令 准备命令 附加命令 1.DelegateCommand 2.RelayCommand 3.AttachbehaviorCommand ...
- C# LINQ(7)
大部分的LINQ的关键字都说了,最后说一下排序吧. LINQ的是查询的利器. 那么查询就会有排序. 所有LINQ提供了两种简单的排序.倒序和默认排序. 关键字是: orderby ascending ...
- CString、string、string.h的区别
CString.string.string.h的区别 CString:CString是MFC或者ATL中的实现,是MFC里面封装的一个关于字符串处理的功能很强大的类,只有支持MFC的工程才能使用. ...
- kali linux之edb--CrossFire缓冲区溢出
漏洞的罪恶根源------变量,数据与代码边界不清,开发人员对用户输入没做过滤,或者过滤不严 如这个脚本,写什么,显示什么,但是加上:,|,&&,后面加上系统命令,就执行命令了 缓冲区 ...
- 【BZOJ2839】集合计数 容斥原理+组合数
Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取法的方案数,答案模1000000007 ...
- luoguP3835 [模板]可持久化平衡树
https://www.luogu.org/problemnew/show/P3835 因为博主精力和实力有限,学不懂 fhq treap 了,因此只介绍 leafy tree 解法 leafy tr ...
- 洛谷P4207 [NOI2005]月下柠檬树(计算几何+自适应Simpson法)
题面 传送门 题解 我还好奇自适应辛普森法干嘛用的呢--突然想起来积分的一个用处就是求曲边图形的面积-- 我们先来考虑一下这些投影是什么形状 一个圆的投影还是它自己 一个圆锥的投影是一个圆加上一个点, ...
- 洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication(最小割)
题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...