一.函数的理解
1.什么是函数?
-
函数的作用: 函数可以把我们经常使用的代码封装起来,需要的时候直接调用即可.这样我们既提高了代码的执行效率,又提高了代码的可维护性
-
在SQL中,我们也可以使用函数对检索出来的数据进行函数操作,使用这些函数,可极大程度的提高用户对数据库的管理效率
-
-
从函数的定义角度分为:
-
内置函数: 系统内置的通用函数
-
自定义函数: 用户根据自己的需求所编写的函数
-
2.不同DBMS的差异
DBMS之间的差异性很大,远大于同一个语言,不同版本之间的差异.大部分DBMS会有自己的特定函数,因此采用SQL函数的代码可移植性很差
-
如大部分DBMS使用"||"或(+)做拼接,而MySQL使用concat()函数做拼接
3.MySQL内置函数
-
从实现的功能上可分为: 数值函数,字符串函数,日期和时间函数,流程控制函数,加密与解密函数,获取Mysql信息函数,聚合函数
-
这里我们通常将函数分为单行函数和聚合函数
-
单行函数
-
操作数据对象
-
按照参数返回一个结果
-
只对一行数据进行操作
-
每行返回一个结果
-
可以嵌套
-
参数可以是一列或一个值
-
-
-
二.数值函数
1.基本函数
-
ABS(x) 返回函数的绝对值
-
SIGN(x) 返回数值x的符号.整数返回1,负数返回-1,0返回0
-
PI() 返回圆周率的值
-
CEIL(x),CEILING(x) 返回大于或等于某个值的最小值
-
FLOOR(x) 返回小于或等于某个值的最小值
-
LEAST(e1,e2) 返回列表中的最小值
-
GREATEST(e1,e2) 返回列表中的最大周
-
MOD(x,y) 返回x除以y的余数
-
RAND() 返回0~1之间的一个随机小数
-
RAND(x) 返回0~1之前的一个随机小数,x作为种子值,当两个函数的种子值相同时,返回同一个小数
-
ROUND(x) 返回一个对x的值进行四舍五入后,最接近x的整数
-
ROUND(x,y) 返回一个对x的值进行四舍五入后,最接近x的整数,结果保留y位小数
-
TRUNCATE(x,y) 返回数字x截断y位小数后的结果
-
SQRT(x) 返回x的平方根,负数返回NULL
-- 基本函数 SELECT ABS(-14),SIGN(12),PI(),CEIL(12.14),FLOOR(12.14) FROM DUAL; SELECT LEAST(12,15),GREATEST(12,15),MOD(45,8),RAND(),RAND(2),RAND(2) FROM DUAL; SELECT ROUND(15.1678),ROUND(13.4915,3),TRUNCATE(18.15642,2),SQRT(4) FROM DUAL;
2.角度,弧度互换函数
-
RADIANS(x) 将角度转换为弧度
-
DEGREES(x) 将弧度转换为角度
-- 角度,弧度函数 SELECT RADIANS(90),RADIANS(1.2346),RADIANS(DEGREES(1.46761)) FROM DUAL;
3.三角函数
-
SIN(x) 返回x的正弦值,其中x的参数为弧度
-
ASIN(x) 返回x的反正弦值.获取正弦为x的值,不在-1~1之间的返回NULL
-
COS(x) 返回x的余弦值,其中x的参数为弧度
-
ACOS(x) 返回x的反余弦值,即获取余弦为x的值.不在-1~1之间的返回NULL
-
TAN(x) 返回x的正切值,其中参数x为弧度值
-
ATAN(x) 返回x的反正切值,即返回正切值为x的值
-
ATAN2(m,n) 返回两个参数的反正切函数
-
COT(x) 返回x的余切值,其中x为弧度值
-- 三角函数 SELECT SIN(RADIANS(30)),DEGREES(ASIN(1)),TAN(RADIANS(45)),COS(DEGREES(1.1245)) FROM DUAL;
4.指数和对数
-
POW(x,y),POWER(x,y) 返回x的y次方
-
EXP(x) 返回e的x次方
-
LN(x),LOG(x) 返回以e为底x的对数.若x<=0,则返回NULL
-
LOG10(x) 返回以10为底x的对数
-
LOG2(x) 返回以2为底x的对数
-- 指数和对数函数 SELECT POW(2,5),LN(EXP(2)),LOG(10),LOG10(10),LOG2(4) FROM DUAL;
5.进制间转换
-
BIN(x) 返回x二进制的二进制代码
-
HEX(x) 返回x的十六进制代码
-
OCT(x) 返回x的八进制代码
-
CONV(x,f1,f2) 返回x的f1进制数变为f2进制数
-- 进制间转换函数 SELECT BIN(10),HEX(10),OCT(10),CONV(10,2,8) FROM DUAL;
三.字符串函数
-
ASCII(s) 返回字符串s中的第一个字符的ASCII码值
-
CHAR_LENGTH(s) 返回字符串s的字符串
-
LENGTH(s) 返回字符串的字节数
-
CONCAT(s1,s2) 将s1,s2拼接为一个字符串
-
INSERT(str,index,len,replaceStr) 将字符串str从第index个位置开始,len个字符长的字符串替换为replaceStr
-
REPLACE(str,a,b) 用字符串b替换str中的字符串a
-
UPPER(s)或UCASE(s) 将字符串s中小写字母转为大写
-
LOWER(s)或LCASE(s) 将字符串s中大写字母转为小写
-- 字符串函数 SELECT ASCII('gaiogn'),CHAR_LENGTH('agoine'),LENGTH('giughie'),CONCAT('fai','giiwh'),INSERT('sjgesg',3,2,'aa'),REPLACE('gdlgnrkl','g','s') FROM DUAL;
四.日期和时间函数
获取日期,时间
-
CURDATE(): 返回当前时间,只包含年月日
-
CURTIME(): 返回当前时间,只包含时分秒
-
NOW(): 返回当前日期和时间
-
UTC_DATE(): 返回世界标准日期
-
UTC_TIME(): 返回时间标准时间