数学函数

函数 作用
ABS(x) 返回X的绝对值
CEIL(x), CEILNG(x) 返回大于或者等于x的最小整数
FLOOR(x) 返回小于或者等于x的最大整数
RAND() 返回0~1的随机数
RAND(x) 返回0~1的随机数,x值相同时返回的随机数相同
SING(x) 返回x的符号,x是负数还是0还是正数
PI() 返回圆周率
TRUNCATE(x,y) 返回数值x保留到小数点y位的值
ROUND(x) 返回离x最近的整数
ROUND(x,y) 保留x小数点y位,但截断时要进行四舍五入
POW(x,y),POWER(x,y) 返回x的y次方(x^y)
SQRT(x) 返回x的平方根
EXP(x) 返回e的x次方(e^x)
MOD(x,y) 返回x除以y的余数
LOG(x) 返回自然对数(以e为底的对数)
LOG10(x) 返回以10为底的对数
RADIANS(x) 将角度转换成弧度
DEGREES(x) 将弧度转换为角度
SIN(x) 求正弦值
ASIN(x) 求反正弦值
COS(x) 求余弦值
ACOS(x) 求反余弦值
TAN(x) 求正切值
ATAN(x),ATAN2(x) 求反正切值
COT(x) 求余切值
select abs(-100),pi();
/*
+-----------+----------+
| abs(-100) | pi()     |
+-----------+----------+
|       100 | 3.141593 |
+-----------+----------+
*/

select sqrt(16), mod(3,2);
/*
+----------+----------+
| sqrt(16) | mod(3,2) |
+----------+----------+
|        4 |        1 |
+----------+----------+
*/

select ceil(8.9), floor(8.9);
/*
+-----------+------------+
| ceil(8.9) | floor(8.9) |
+-----------+------------+
|         9 |          8 |
+-----------+------------+
*/

字符串函数

函数 作用
CHAR_LENGTH(s) 返回字符串s的字符数
LENGTH(s) 返回字符串s的长度
CONCAT(s1, s2, …) 将字符串s1,s2等多个字符串合并为一个字符串
CONCAT_WS(x,s1,s2,…) 同上,但是在每个字符串直接要加上x
INSERT(s1, x, len, s2) 将字符串s2替换s1的x位置开始长度为len的字符串
UPPER(s),UCASE(s) 将字符串s所有字母都变成大写字母
LOWER(s),LCASE(s) 将字符串s所有字母都变成小写字母
LEFT(s,n) 返回字符串s的前n个字符
RIGHT(s,n) 返回字符串s的后n个字符
LPAD(s1, len, s2) 字符串s2来填充s1的开始处,使字符串长度达到len
RPAD(s1, len, s2) 字符串s2来填充s1的末尾处,使字符串长度达到len
LTRIM(s) 去掉字符串s开始处的空格
RTRIM(s) 去掉字符串s结尾处的空格
TRIM(s) 去掉字符串s开始和结尾处的空格
TRIM(s1 from s) 去掉字符串s中开始和结尾处的字符串s1
REPEAT(s,n) 将祖父穿s重复n次
SPACE(n) 返回n个空格
REPLACE(s,s1,s2) 用字符串s2替代字符串s中的字符串s1
STRMP(s1,s2) 比较字符串s1和s2
SUBSTRING(s, n, len),MID(s, n, len) 获取字符串s中的n个位置开始长度为len的字符串
LOCATE(s1, s),POSTION(s1, IN s),INSTR(s, s1) 从字符串s获取s1的开始位置
REVERSE(s) 反转字符串s
ELT(n, s1, s2, …) 返回第n个字符串
select concat('sha', 'ng', 'hai'), concat_ws('-','sha', 'ng', 'hai');
/*
+----------------------------+-----------------------------------+
| concat('sha', 'ng', 'hai') | concat_ws('-','sha', 'ng', 'hai') |
+----------------------------+-----------------------------------+
| shanghai                   | sha-ng-hai                        |
+----------------------------+-----------------------------------+
*/

select insert('shanghai', 6, 3, 'mian');
/*
+----------------------------------+
| insert('shanghai', 6, 3, 'mian') |
+----------------------------------+
| shangmian                        |
+----------------------------------+
*/

select upper('mysql'), lower('MYSQL');
/*
+----------------+----------------+
| upper('mysql') | lower('MYSQL') |
+----------------+----------------+
| MYSQL          | mysql          |
+----------------+----------------+
*/

select reverse('abcdefg');
/*
+--------------------+
| reverse('abcdefg') |
+--------------------+
| gfedcba            |
+--------------------+
*/

日期和时间函数

函数 作用
CURDATE(), CURRENT_DATE() 返回当前日期
CURTIME(), CURRENT_TIME() 返回当前时间
NOW(), CURRENT_TIMESTAMP(), LOCALTIME(), SYSDATE(), LOCALTIMESTAMP() 返回当前时间和日期
UNIX_TIMESTAMP() 以unix时间戳的形式返回当前时间
UNIX_TIMESTAMP(D) 将时间D以unix时间戳的形式返回
FROM-UNIXTIME(D) 把unix时间戳转换为普通格式的时间
UTC_DATE() 返回UTC日期
UTC_TIME() 返回UTC时间
MONTH(d) 返回日期d中的月份值
MONTHNAME(d) 返回日期d中的月份名称
DAYNAME(d) 返回日期d是星期几
DAYOFWEEK(d) 返回日期d是星期几,1表示星期日
WEEKDAY(d) 返回日期d是星期几,0表示星期一
WEEK(d) 计算日期d是本年的第几个星期,范围是0~53
WEEKOFYEAR(d) 计算日期d是本年的第几个星期,范围是1~53
DAYOFYEAR(d) 计算日期d是本年的第几天
DAYOFMONTH(d) 计算日期d是本月的第几天
YEAR(d) 返回日期d中的年份值
QUARTER(d) 返回日期d是第几季度,范围是1~4
HOUR(t) 返回时间t中的小时值
MINUTE(t) 返回时间t中的分钟值
SECOND(t) 返回时间t中的秒钟值
EXTRACT(type FROM d) 从日期d中获取指定的值,type指定返回的值,如year
TIME_TO_SEC(t) 将时间转换成秒
SEC_TO_TIME(t) 将秒为时间单位的s转换成时分秒的格式
TO_DAYS(d) 计算日期d~0000年1月1日的天数
FROM_DAYS(n) 计算日期从0000年1月1日开始n天后的日期
DATEDIFF(d1, d2) 计算日期d1~d2之间相隔的天数
ADDDATE(d, n), 计算起始日期d加n天后的日期
ADDDATE(d, INTERVAL, expr type),DATE_ADD(d, INTERVAL, expr type) 计算起始日期d加上一个时间段后的日期
SUBDATE(d, n) 计算起始日期d减去n天的日期
SUBDATE(d, INTERVAL, expr type) 计算起始日期d减去一个时间段后的日期
ADDTIME(t, n) 计算起始时间t加上n秒的时间
SUBTIME(t, n) 计算起始时间t减去上n秒的时间
DATE_FROMAT(d, f) 按照表达式f的要求显示日期d
TIME_FROMAT(t, f) 按照表达式f的要求显示时间t
GET_FROMAT(type, s) 根据字符串s获取type类型数据的显示格式
select curdate(), current_time(), now();
/*
+------------+----------------+---------------------+
| curdate()  | current_time() | now()               |
+------------+----------------+---------------------+
| 2020-03-28 | 11:04:01       | 2020-03-28 11:04:01 |
+------------+----------------+---------------------+
*/

select month('2015-09-28 00:43:12');
/*
+------------------------------+
| month('2015-09-28 00:43:12') |
+------------------------------+
|                            9 |
+------------------------------+
*/

条件判断函数

用于比较或者流程控制

if

语法:if(exp, v1, v2)

select id,name,age,if(age > 18, '成年了', '未成年') from employee;
/*
+----+--------+------+----------------------------------------+
| id | name   | age  | if(age > 18, '成年了', '未成年')       |
+----+--------+------+----------------------------------------+
|  1 | 刘备   |   26 | 成年了                                 |
|  2 | 孙权   |   15 | 未成年                                 |
|  3 | 曹操   |   25 | 成年了                                 |
|  4 | 大乔   |   12 | 未成年                                 |
|  5 | 孔明   |   15 | 未成年                                 |
+----+--------+------+----------------------------------------+
*/

ifnull

语法:ifnull (v1, v2)

select id,name,address,ifnull(address, '地址不详') from employee;
/*
+----+--------+---------+---------------------------------+
| id | name   | address | ifnull(address, '地址不详')     |
+----+--------+---------+---------------------------------+
|  1 | 刘备   | 西蜀    | 西蜀                            |
|  2 | 孙权   | 东吴    | 东吴                            |
|  3 | 曹操   | 许昌    | 许昌                            |
|  4 | 大乔   | 东吴    | 东吴                            |
|  5 | 孔明   | NULL    | 地址不详                        |
+----+--------+---------+---------------------------------+
*/

case

第一种

语法:case when exp1 then v1 [when expr2 then v2] ... else vn end

select id,name,case when age > 12 then '小学生' when age > 18 then '成年' else '未成年' end from employee;
/*
+----+--------+--------------------------------------------------------------------------------------+
| id | name   | case when age > 12 then '小学生' when age > 18 then '成年' else '未成年' end         |
+----+--------+--------------------------------------------------------------------------------------+
|  1 | 刘备   | 小学生                                                                               |
|  2 | 孙权   | 小学生                                                                               |
|  3 | 曹操   | 小学生                                                                               |
|  4 | 大乔   | 未成年                                                                               |
|  5 | 孔明   | 小学生                                                                               |
+----+--------+--------------------------------------------------------------------------------------+
*/

select id,name,case when age > 12 then '小学生' else '未成年' end as '年龄阶段' from employee;
/*
+----+--------+--------------+
| id | name   | 年龄阶段     |
+----+--------+--------------+
|  1 | 刘备   | 小学生       |
|  2 | 孙权   | 小学生       |
|  3 | 曹操   | 小学生       |
|  4 | 大乔   | 未成年       |
|  5 | 孔明   | 小学生       |
+----+--------+--------------+
*/

第二种

语法:case expr1 when e1 then v1 [when e2 then v2] ... else vn end

系统信息

函数 作用
VERSION() 返回数据库的版本号
CONNECTION_ID() 返回服务器的连接数
DATABASE(), SCHEMA() 返回当前数据库名
USER(), STSTEM_USER, SESSION_USER() 返回当前用户
CURRENT_USER(), CURRENT_USER 返回当前用户
CHARSET(str) 返回字符串的str的字符集
COLLATION(str) 返回字符串str的字符排列方式
LAST_INSERT_ID() 返回最近生产的auto_increment值

加密函数

PASSWORD()

MD5()

ENCODE()

语法:encode(str, pwd_str)

如果要存储,则需要存储的字段类型为blog

DECODE()

语法:decode(str, pwd_str)

只能对encode编码之后的字符进行解码

其他函数

format

语法:format(x, n)

对x进行格式化保留n位小数

select format(3.1415926), format(3.1415926, 1);
/*
+----------------------+----------------------+
| format(3.1415926, 3) | format(3.1415926, 1) |
+----------------------+----------------------+
| 3.142                | 3.1                  |
+----------------------+----------------------+
*/

IP地址和数字转换

inet_aton(ip)

inet_ntoa(n)

select inet_aton('192.168.1.1'), inet_ntoa(3232235777);
/*
+--------------------------+-----------------------+
| inet_aton('192.168.1.1') | inet_ntoa(3232235777) |
+--------------------------+-----------------------+
|               3232235777 | 192.168.1.1           |
+--------------------------+-----------------------+
*/

重复执行指定操作函数

语法:benchmark(n, expr)

select benchmark(1000, now());
/*
+------------------------+
| benchmark(1000, now()) |
+------------------------+
|                      0 |
+------------------------+
*/

版权声明:本文为chancey原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/chancey/p/12588429.html