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 ...
随机推荐
- 百度图片API
转载请注明出处:http://blog.csdn.net/yuanwofei/article/details/16343743 一.通用api http://image.baidu.com/i?tn= ...
- 《Servlet和jsp学习指南》 笔记2
chapter 13 请求和响应的装饰 初步了解Decorator模式: 在不修改一个对象的类的源码的情况下,装饰这个对象的行为. chapter 14 异步处理 异步Servlet和Filter,只 ...
- hive的安装与配置 mysql安装 启动
三种模式 内嵌模式:元数据保持在内嵌的derby模式,只允许一个会话连接 本地独立模式:在本地安装Mysql,吧元数据放到mySql内 远程模式:元数据放置在远程的Mysql数据库 1.下载Hive安 ...
- iOS App 内部跳转(设置、Wifi、蓝牙...)关键词
1.iOS 10 以前: 蜂窝网络:prefs:root=MOBILE_DATA_SETTINGS_ID Wi-Fi:prefs:root=WIFI 定位服务:prefs:root=LOCATION_ ...
- Atcoder Grand Contest 031C(构造,思维,异或,DFS)
#include<bits/stdc++.h>using namespace std;int n,a,b,sum;void dfs(int x,int y,int ban){ if( ...
- php代码审计10审计会话认证漏洞
挖掘经验:遇到的比较多的就是出现在cookie验证上面,通常是没有使用session来认证,直接将用户信息保存在cookie中 Session固定攻击:黑客固定住目标用户的session i ...
- 【转】C#中静态方法和非静态方法的区别
源地址:https://www.cnblogs.com/amoshu/p/7477757.html 备注:静态方法不需要类的实例化就能调用,因为它是一直保存在内存中,不像非静态方法一样要放在实例化类时 ...
- 洛谷P2775 机器人路径规划问题
传送门 题解 至今没看懂这深搜怎么写的…… //minamoto #include<iostream> #include<cstdio> #include<cstring ...
- centos7用docker安装单节点redis4.0.11
[root@localhost conf]# docker search redisINDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATEDdocker.io d ...
- UISearchBar 自定义处理
首先通过 KVC 获取到内部的 textField, 然后自定制处理 UITextField *searchField = [searchBar valueForKey:@"searchFi ...