一.函数的理解
不同DBMS之间的差异性很大, 只有很少的函数是被DBMS同时支持的,
大部分DBMS都会有自己特定的函数,这就意味着采用SQL函数的代码可移植性是很差的
MySQL提供的内置函数从功能角度可以分为,数值函数, 字符串函数, 日期函数, 流程控制函数, 加密与解密函数, 获取MySQL信息函数, 聚合函数等, 这里我们把这些简单分为两类: 单行函数和聚合函数
二.数值函数
1.基本函数
函数 | 功能 |
---|---|
ABS(x) | 返回x的绝对值 |
SIGN(x) | 返回x的符号, 正返回1, 负返回-1, 0返回0 |
PI() | 返回圆周率的值 |
CEIL(x) / CEILING(x) | 表示向上取整,只返回值X的整数部分,小数部分舍弃 |
FLOOR(x) | 表示向下取整,只返回值X的整数部分,小数部分舍弃 |
LEAST(x1,x2,x3…) | 返回列表中的最小值 |
GREATEST(x1,x2,x3…) | 返回列表中的最大值 |
MOD(x,y) | 返回x除以y后的余数 |
RAND() | 返回0~1的随机数 |
RAND(x) | 返回0~1的随机数, 其中x是种子值,相同的x值会返回相同的随机数 |
ROUND(x) | 返回一个对x的值进行四舍五入后,最接近x的整数 |
ROUND(x,y) | 返回一个对x的值进行四舍五入后最接近x的值, 并保留小数点后面y位 |
TRUNCATE(x,y) | 返回数字x截断为y位小数的结果 |
SQRT(x) | 返回x的平方根, 当x的值为负数时,返回NULL |
SELECT ABS(-1), ABS(-0.3), ABS(12), SIGN(13),
SIGN(-14), SIGN(0),PI()
FROM DUAL
/*
ABS(-1)|ABS(-0.3)|ABS(12)|SIGN(13)|SIGN(-14)|SIGN(0)|PI() |
-------+---------+-------+--------+---------+-------+--------+
1| 0.3| 12| 1| -1| 0|3.141593|
*/
SELECT CEIL(12.4), CEIL(12.5), CEILING(13.3), CEILING(13.9),
FLOOR(15.4),FLOOR(15.5)
FROM DUAL
/*
CEIL(12.4)|CEIL(12.5)|CEILING(13.3)|CEILING(13.9)|FLOOR(15.4)|FLOOR(15.5)|
----------+----------+-------------+-------------+-----------+-----------+
13| 13| 14| 14| 15| 15|
*/
SELECT LEAST(5,9,0.4,-3), GREATEST(5,9,0.4,-3), MOD(13,5), MOD(-7,3),MOD(7,-3)
FROM DUAL
/*
LEAST(5,9,0.4,-3)|GREATEST(5,9,0.4,-3)|MOD(13,5)|MOD(-7,3)|MOD(7,-3)|
-----------------+--------------------+---------+---------+---------+
-3.0| 9.0| 3| -1| 1|
*/
SELECT RAND(),RAND(), RAND(2), RAND(2),
RAND(-4), RAND(-4)
FROM DUAL
/*
RAND() |RAND() |RAND(2) |RAND(2) |RAND(-4) |RAND(-4) |
-----------------+------------------+------------------+------------------+-------------------+-------------------+
0.632833955467524|0.4289659144626613|0.6555866465490187|0.6555866465490187|0.15448799371206015|0.15448799371206015|
*/
SELECT ROUND(4), ROUND(4.3), ROUND(4.5),
ROUND(4.38),ROUND(4.73)
FROM DUAL
/*
ROUND(4)|ROUND(4.3)|ROUND(4.5)|ROUND(4.38)|ROUND(4.73)|
--------+----------+----------+-----------+-----------+
4| 4| 5| 4| 5|
*/
SELECT ROUND(4.3,1), ROUND(4.5,0), ROUND(4.6,1),
ROUND(4.3,2),ROUND(4.37,1)
FROM DUAL
/*
ROUND(4.3,1)|ROUND(4.5,0)|ROUND(4.6,1)|ROUND(4.3,2)|ROUND(4.37,1)|
------------+------------+------------+------------+-------------+
4.3| 5| 4.6| 4.3| 4.4|
*/
SELECT TRUNCATE(3.1415,2),TRUNCATE(3.1415,3),
TRUNCATE(3.1415,0),TRUNCATE(563.1415,-1),
TRUNCATE(563.1415,-2),TRUNCATE(563.1415,-3)
FROM DUAL
/*
TRUNCATE(3.1415,2)|TRUNCATE(3.1415,3)|TRUNCATE(3.1415,0)|TRUNCATE(563.1415,-1)|TRUNCATE(563.1415,-2)|TRUNCATE(563.1415,-3)|
------------------+------------------+------------------+---------------------+---------------------+---------------------+
3.14| 3.141| 3| 560| 500| 0|
*/
SELECT SQRT(4),SQRT(-2),SQRT(0)
FROM DUAL
/*
SQRT(4)|SQRT(-2)|SQRT(0)|
-------+--------+-------+
2.0| | 0.0|
*/
2.角度与弧度互换函数
函数 | 功能 |
---|---|
RADIANS(x) | 将角度转化为弧度,其中,参数x为角度值 |
DEGREES(x) | 将弧度转化为角度,其中,参数x为弧度值 |
3.三角函数
函数 | 功能 |
---|---|
SIN(x) | 返回x的正弦值 |
ASIN(x) | 返回x的反正弦值,如果x的值不在-1到1之间,则返回NULL |
COS(x) | 返回x的余弦值 |
ACOS(x) | 返回x的反余弦值,如果x的值不在-1到1之间,则返回NULL |
TAN(x) | 返回x的正切值 |
ATAN(x) | 返回x的反正切值 |
ATAN2(m,n) | 返回两个参数的反正切值 |
COT(x) | 返回x的余切值 |
4.指数与对数
函数 | 功能 |
---|---|
POW(x,y) / POWER(x,y) | 返回x的y次方 |
EXP(x) | 返回e的x次方, e为2.7182… |
LN(x),LOG(x) | 返回以e为底的x的对数,当x<=0时, 返回NULL |
LOG10(x) | 返回以10为底的x的对数,当x<=0时, 返回NULL |
LOG2(x) | 返回以2为底的x的对数,当x<=0时, 返回NULL |
SELECT POW(2,2), POWER(2,3), EXP(3)
FROM DUAL
/*
POW(2,2)|POWER(2,3)|EXP(3) |
--------+----------+------------------+
4.0| 8.0|20.085536923187668|
*/
SELECT LN(3), LOG(3), LN(-1),
LOG10(2)
FROM DUAL
/*
LN(3) |LOG(3) |LN(-1)|LOG10(2) |
------------------+------------------+------+------------------+
1.0986122886681098|1.0986122886681098| |0.3010299956639812|
*/
5.进制间的转换
函数 | 功能 |
---|---|
BIN(x) | 返回x的二进制编码 |
HEX(x) | 返回x的十六进制编码 |
OCT(x) | 返回x的八进制编码 |
CONV(x,f1,f2) | 返回f1进制数变成f2进制数 |
SELECT BIN(31415),HEX(31415),
OCT(31415),CONV(314,8,2)
FROM DUAL
/*
BIN(31415) |HEX(31415)|OCT(31415)|CONV(314,8,2)|
---------------+----------+----------+-------------+
111101010110111|7AB7 |75267 |11001100 |
*/