MySQL 5.7 Reference Manual Chapter 13 Functions and Operators 参考手册第十三章函数与操作符内容总结
默认函数名和左括号之间不能存在空格,用来帮助 MySQL 解释器区分函数调用和表名列名引用
为了简洁表示,接下来所有的示例将采用简短输出
mysql> SELECT MOD(29,9);
+-----------+
| mod(29,9) |
+-----------+
| 2 |
+-----------+
1 rows in set (0.00 sec)简化如下输出mysql> SELECT MOD(29,9);-> 2
操作符操作不同类型,将发生类型转化,有时会隐式转化
mysql> SELECT 1+'1';-> 2
mysql> SELECT CONCAT(2,' test');-> '2 test'
显式转换数字至字符串用 CAST()
函数,通过 CONCAT()
函数将会隐式转换,因为需要字符串参数
mysql> SELECT 38.8, CAST(38.8 AS CHAR);-> 38.8, '38.8'
mysql> SELECT 38.8, CONCAT(38.8);-> 38.8, '38.8'
mysql> SELECT 1 > '6x';-> 0
mysql> SELECT 7 > '6x';-> 1
mysql> SELECT 0 > 'x6';-> 0
mysql> SELECT 0 = 'x6';-> 1
用数字查询字符串列,MySQL 无法使用索引,因为很多不同的字符串可以转换成该数字,譬如 '1', ' 1', or '1a'
SELECT * FROM tbl_name WHERE str_col=1;
mysql> SELECT '18015376320243458' = 18015376320243458;-> 1
mysql> SELECT '18015376320243459' = 18015376320243459;-> 0
之所以会发生这种情况是因为转换成 floating-point numbers
进行比较,只有 53 bits of precision
(精度)
mysql> SELECT '18015376320243459'+0.0;-> 1.8015376320243e+16
显式转换解决这个问题
mysql> SELECT CAST('18015376320243459' AS UNSIGNED) = 18015376320243459;-> 1
通过括号改变优先级
mysql> SELECT 1+2*3;-> 7
mysql> SELECT (1+2)*3;-> 9
比较的结果是 1 (TRUE), 0 (FALSE), or NULL
默认字符串比较是不区分大小写
=
mysql> SELECT 1 = 0;-> 0
mysql> SELECT '0' = 0;-> 1
mysql> SELECT '0.0' = 0;-> 1
mysql> SELECT '0.01' = 0;-> 0
mysql> SELECT '.01' = 0.01;-> 1
<=>
NULL 安全比较,和 = 类似,当都为 NULL 时返回1,任意一个为 NULL 时返回0
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;-> 1, 1, 0
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;-> 1, NULL, NULL
<>, !=
mysql> SELECT '.01' <> '0.01';-> 1
mysql> SELECT .01 <> '0.01';-> 0
mysql> SELECT 'zapp' <> 'zappp';-> 1
<=,<,>=,>
表达式 | 等价 |
---|---|
(a, b) = (x, y) | (a = x) AND (b = y) |
(a, b) <=> (x, y) | (a <=> x) AND (b <=> y) |
(a, b) <> (x, y) and (a, b) != (x, y) | (a <> x) OR (b <> y) |
(a, b) <= (x, y) | (a < x) OR ((a = x) AND (b <= y)) |
(a, b) < (x, y) | (a < x) OR ((a = x) AND (b < y)) |
(a, b) >= (x, y) | (a > x) OR ((a = x) AND (b >= y)) |
(a, b) > (x, y) | (a > x) OR ((a = x) AND (b > y)) |
expr BETWEEN min AND max | (min <= expr AND expr <= max) |
expr NOT BETWEEN min AND max | NOT (expr BETWEEN min AND max) |
IS and IS NOT and IS NULL and IS NOT NULL
mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;-> 1, 1, 1
mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;-> 1, 1, 0
mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;-> 0, 0, 1
mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;-> 1, 1, 0
COALESCE(value,…) 返回第一个不为 NULL 的值
mysql> SELECT COALESCE(NULL,1);-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);-> NULL
LEAST(value1,value2,…) 返最小值
GREATEST(value1,value2,…) 返最大值,返回 NULL 若其中一个为 NULL
mysql> SELECT GREATEST(2,0);-> 2
mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);-> 767.0
mysql> SELECT GREATEST('B','A','C');-> 'C'
expr IN (value,…) expr NOT IN (value,…) 存在返回1,不存在返回0
mysql> SELECT 2 IN (0,3,5,7);-> 0
mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');-> 1mysql> SELECT (3,4) IN ((1,2), (3,4));-> 1
mysql> SELECT (3,4) IN ((1,2), (3,5));-> 0
不要混合带引号和不带引号
SELECT val1 FROM tbl1 WHERE val1 IN (1,2,'a');Instead, write it like this:SELECT val1 FROM tbl1 WHERE val1 IN ('1','2','a');
ISNULL(expr)
mysql> SELECT ISNULL(1+1);-> 0
mysql> SELECT ISNULL(1/0);-> 1
INTERVAL(N,N1,N2,N3,…) Returns 0 if N < N1, 1 if N < N2 and so on or -1 if N is NULL
mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);-> 3
mysql> SELECT INTERVAL(10, 1, 10, 100, 1000);-> 2
mysql> SELECT INTERVAL(22, 23, 30, 44, 200);-> 0
NOT, !
mysql> SELECT NOT 10;-> 0
mysql> SELECT NOT 0;-> 1
mysql> SELECT NOT NULL;-> NULL
mysql> SELECT ! (1+1);-> 0
mysql> SELECT ! 1+1;-> 1
AND, &&
mysql> SELECT 1 AND 1;-> 1
mysql> SELECT 1 AND 0;-> 0
mysql> SELECT 1 AND NULL;-> NULL
mysql> SELECT 0 AND NULL;-> 0
mysql> SELECT NULL AND 0;-> 0
OR, ||
mysql> SELECT 1 OR 1;-> 1
mysql> SELECT 1 OR 0;-> 1
mysql> SELECT 0 OR 0;-> 0
mysql> SELECT 0 OR NULL;-> NULL
mysql> SELECT 1 OR NULL;-> 1
XOR
mysql> SELECT 1 XOR 1;-> 0
mysql> SELECT 1 XOR 0;-> 1
mysql> SELECT 1 XOR NULL;-> NULL
mysql> SELECT 1 XOR 1 XOR 1;-> 1
a XOR b equal (a AND (NOT b)) OR ((NOT a) and b)
= 在 SET 语法中赋值
:= 直接赋值
不像 = 符号,:= 符号永远不会解析成比较运算符,这就意味你可以使用它在任何合法的 SQL 语法里
mysql> SELECT @var1, @var2;-> NULL, NULL
mysql> SELECT @var1 := 1, @var2;-> 1, NULL
mysql> SELECT @var1, @var2;-> 1, NULL
mysql> SELECT @var1, @var2 := @var1;-> 1, 1
mysql> SELECT @var1, @var2;-> 1, 1mysql> SELECT @var1:=COUNT(*) FROM t1;-> 4
mysql> SELECT @var1;-> 4mysql> SELECT @var1;-> 4
mysql> SELECT * FROM t1;-> 1, 3, 5, 7mysql> UPDATE t1 SET c1 = 2 WHERE c1 = @var1:= 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0mysql> SELECT @var1;-> 1
mysql> SELECT * FROM t1;-> 2, 3, 5, 7
= 符号只在两种场景中使用
- SET statement
- SET clause of an UPDATE statement
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
mysql> SELECT CASE 1 WHEN 1 THEN 'one'-> WHEN 2 THEN 'two' ELSE 'more' END;-> 'one'
mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;-> 'true'
mysql> SELECT CASE BINARY 'B'-> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;-> NULL
IF(expr1,expr2,expr3)
mysql> SELECT IF(1>2,2,3);-> 3
mysql> SELECT IF(1<2,'yes','no');-> 'yes'
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');-> 'no'
IFNULL(expr1,expr2)
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'
NULLIF(expr1,expr2)
mysql> SELECT NULLIF(1,1);-> NULL
mysql> SELECT NULLIF(1,2);-> 1
字符串操作函数
返回字符串长度超过限制,返回 NULL
字符位置从 1 开始
需要长度参数的函数,非整形参数将就近取整
很多函数声明 略
字符串比较 略
正则表达式 略
函数返回值字符集 略
算术运算符 略
数学函数 略
随机数生成 RAND(), RAND(N)
N为随机数种子
若想获得随机数 R i <= R < j
用如下表达式 FLOOR(i + RAND() * (j − i))
你可以检索随机行通过这种方式
SELECT * FROM tbl_name ORDER BY RAND()
SELECT * FROM table1, table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000
CEIL(X) CEILING(X)
向上取整
FLOOR(X)
向下取整
ROUND(X), ROUND(X,D)
四舍五入
mysql> SELECT ROUND(-1.23);-> -1
mysql> SELECT ROUND(-1.58);-> -2
mysql> SELECT ROUND(1.58);-> 2
mysql> SELECT ROUND(1.298, 1);-> 1.3
mysql> SELECT ROUND(1.298, 0);-> 1
mysql> SELECT ROUND(23.298, -1);-> 20
mysql> SELECT ROUND(150.000,2), ROUND(150,2);
+------------------+--------------+
| ROUND(150.000,2) | ROUND(150,2) |
+------------------+--------------+
| 150.00 | 150 |
+------------------+--------------+
日期和时间函数
一次查询中多次调用获取时间函数将为同一值
SELECT NOW(), NOW();
-> '2016-12-01 16:53:16', '2016-12-01 16:53:16'
MySQL 中使用的日历 略
全文搜索函数 略
类型转换函数
BINARY 字符串转二进制字符串
CAST() 转换到任何指定类型
CONVERT() 转换到任何指定类型(多了字句用于不同字符集之间转换)
SELECT CONVERT(_latin1'Müller' USING utf8);
XML 函数 略
位操作符和函数 略
加密和压缩函数 略
信息函数 略
效率测试函数
mysql> SELECT BENCHMARK(1000000,ENCODE('hello','goodbye'));
+----------------------------------------------+
| BENCHMARK(1000000,ENCODE('hello','goodbye')) |
+----------------------------------------------+
| 0 |
+----------------------------------------------+
1 row in set (4.74 sec)
略 略 略
MySQL 5.7 Reference Manual Chapter 13 Functions and Operators 参考手册第十三章函数与操作符内容总结相关推荐
- 《MySQL 8.0 参考手册》第 14 章 MySQL 数据字典
文章目录 14.1 数据字典模式 数据字典升级过程 使用 MySQL 调试版本查看数据字典表 14.2 删除基于文件的元数据 14.3 事务型数据字典 14.4 数据字典缓存 14.5 INFORMA ...
- MySQL 5.7.17 Group Relication(组复制)搭建手册【转】
本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...
- MySQL 5.7.17 Group Relication(组复制)搭建手册
本博文介绍了Group Replication的两种工作模式的架构. 并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode. 当然,文末给出了G ...
- Book: Programming with Libevent(2)--A Libevent Reference Manual(1)
A Libevent Reference Manual 参考链接 R0: Preliminaries Libevent from 10,000 feet The Libraries The Heade ...
- $_server[#039;php_auth_user#039;],找不到’./mysql/user.MYD#039;(错误代码:13 – 权限被拒绝)...
我正在尝试全新安装Mac OSX LAMP并运行命令 mysql_secure_installation 我输入了root密码,当我遇到这个错误时,我现在必须输入一个新密码,有没有人有这方面的经验? ...
- halcon算子盘点:Chapter 13:对象、Chapter 14 区域
Chapter 13:Object 13.1 Information 1. count_obj 功能:统计一个元组中的对象. 2. get_channel_info 功能:一幅目标图像组成部分的信 ...
- mac mysql降版本_Mac卸載mysql並安裝mysql升級到8.0.13版本
引言 今天mysql升級到8.0.13版本,遇到了很多問題,在此進行總結方便以后查看. 卸載mysql brew uninstall mysql sudo rm /usr/local/mysql su ...
- mysql时间和本地时间相差13个小时
小谢博客地址https://xgs888.top/post/view?id=76 mysql时间和本地时间相差13个小时 作者:谢高升 发布:2017-12-15 浏览:0次 mysql时间和本地时间 ...
- 模拟集成电路笔记 | 第一部分 | Chapter 1-3
模拟集成电路笔记 | 第一部分 | Chapter 1-3 本系列笔记是参考书籍<CMOS模拟集成电路>和中科大相关课程课件而做成,笔记第一版为手写版,现在在手写版的基础上重新编写第二版( ...
最新文章
- .NET Core EntityFramework生成自动增长的主键
- 大型网站架构之JAVA中间件
- LeetCode自我总结(对链表进行插入排序)
- IP地址转换函数——inet_pton inet_ntop inet_aton inet_addr inet_ntoa
- From the data point of view
- python mongodb_python实现mongodb的增删改查
- Excel的Range对象(C#)
- 分享一波大厂面试题,助力大家拿个好Offer
- Html5带来了什么?
- 十行代码训练sklearn七种分类算法
- 基于javaweb+mysql的+JPA学生宿舍学生住宿申请管理系统(管理员、学生)
- 35KV,110KV变电所设计,供配电电气部分设计
- netapp linux ntfs,netapp存储常用命令
- 矽谷真假U盘测试软件,silicom矽谷真假u盘测试
- ffmpeg:将webm无损转为mp4
- 阿里巴巴十周年有感----宗教的盛宴
- 我的Java学习笔记(二)飞机大战小游戏
- pytorch快速上手-使用自动标注软件Openlabeling和yolov5快速完成目标检测
- 用python一键生成你的微信好友头像墙
- vue会不会?看了你就会了!干了#兄弟们
热门文章
- Quartz立即执行
- JS拼接HTML方法以及注意事项
- 在android4.4上主动获取手机电量
- springboot集成Quartz(简单版)job不存储数据库
- 【力扣】08 剧情触发时间:在战略游戏中,玩家往往需要发展自己的势力来触发各种新的剧情。一个势力的主要属性有三种,分别是文明等级(C),资源储备(R)以及人口数量(H)。在游戏开始时(第 0 天),三
- 亲爱的百度,您带着bug翩翩走来……呃
- 国信长天单片机竞赛训练之原理图讲解及常用外设原理(遗失的章节-零)
- COOH-PEG10k-TZ,Tetrazine-PEG10k-Acid具有很好的水溶性
- MySQL:介于普通读和锁定读的加锁方式,linux视频格式转换
- 第二节 概率、古典概型、几何概型