一.函数概述
1.作用:将代码封装来提高效率,提高可维护性
2.分类:内置函数和自定义函数
(1)内置函数又分为
- 单行函数:进去一行数据,出来一行数据
- 聚合函数(分组函数或多行函数):进去多行数据,出来一行数据
3.不同DBMS函数的差异很大,所以采用SQL函数的代码可移植性较差
4.单行函数:
(1)操作数据对象
(2)接收参数返回一个结果
(3)只对一行进行变换且每行返回一个结果
(4)可嵌套
(5)参数可以是一列或一个值二.数值函数
1.基本函数
| 函数 | 用法 | | —- | —- | | ABS(x) | 返回x的绝对值 | | SIGN(x) | 返回x的符号(正数返回1,负数返回-1,0返回0) | | PI() | 返回圆周率 | | CEIL(x),CEILING(x) | 返回大于或等于某个值的最小整数 | | FLOOR(x) | 返回小于或等于某个值的最大整数
| | LEAST(e1,e2,e3,e4..) | 返回列表中最小值 | | GREATEST(e1,e2,e3..) | 返回列表中最大值 | | 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 |
2.角度与弧度互换函数
函数 | 用法 |
---|---|
RADIANS(x) | 将角度转化为弧度,x为角度值 |
DEGREES(x) | 将弧度转化为角度,x为弧度值 |
3.三角函数
函数 | 用法 |
---|---|
SIN(x) | 返回x的正弦值,其中x为弧度值 |
ASIN(x) | 返回x的反正弦值,即获取正弦为x的值 若x不在[-1,1],返回NIULL |
COS(x) | 返回x的余弦值,其中x为弧度值 |
ACOS(x) | 返回x的反余弦值,即获取余弦为x的值 若x不在[-1,1],返回NIULL |
TAN(x) | 返回x的正切值,其中x为弧度值 |
ATAN(x) | 返回x的反正切值,即获取正切为x的值 |
ATAN2(m,n) | 返回两个参数的反正切值 |
COT(x) | 返回x的余弦值,其中x为弧度值 |
4.指数与对数
函数 | 作用 |
---|---|
POW(x,y),POWER(x,y) | 返回x的y次方 |
EXP(x) | 返回e的x次方,e是常数,e=2.718281828459045 |
LN(x),LOG(x) | 返回以e为底x的对数,当x<=0时,返回结果为NULL |
LOG10(x) | 返回以10为底x的对数,当x<=0时,返回结果为NULL |
LOG2(x) | 返回以2为底x的对数,当x<=0时,返回NULL |
5.进制间的转换
函数 | 作用 |
---|---|
BIN(x) | 返回x的二进制编码 |
HEX(x) | 返回x的十六进制编码 |
OCT(x) | 返回x的八进制编码 |
CONV(x,f1,f2) | f1是指定x为几进制,返回f2进制编码 |
三.字符串函数
1.SQL中索引从1开始
函数 | 作用 |
---|---|
ASCII(s) | 返回字符串s中第一个字符的ASCII码值 |
CHAR_LENGTH(s) | 返回字符串s的字符数 |
LENGTH(s) | 返回s的字节数,和字符集有关 |
CONCAT(s1.s2….sn) | 连接s1,s2…sn为一个字符串 |
CONCAT_WS(x,s1.s2….sn) | 连接s1,s2…sn为一个字符串,但是要在每个字符串间加x |
INSERT(str,idx,len,replacestr) | 将字符串str从第idx位置开始,len个字符长的子串替换为replacestr |
REPLACE(str,a,b) | 用字符串b替换str中的字符串a |
UPPER(s)或UCASE(s) | 将字符串s所有字母转大写 |
LOWER(s)或LCASE(s) | 将字符串s所有字母转小写 |
LEFT(str,n) | 返回str最左边的n个字符 |
RIGHT(str,n) | 返回str最右边的n个字符 |
LPAD(str,len,pad) | 用字符串pad对str最左边进行填充,直到str的长度为len |
RPAD(str,len,pad) | 用字符串pad对str最右边进行填充,直到str的长度为len |
LTRIM(s) | 去除字符串s左侧的空格 |
RTRIM(s) | 去除字符串s右侧的空格 |
TRIM(s) | 去除字符串s开始于结尾的空格 |
TRIM(s1 FROM s) | 去除字符串s开始于结尾的s1 |
TRIM(TEADING s1 FROM s) | 去除字符串s开始处的s1 |
TRIM(TRAILING s1 FROM s) | 去除字符串s结尾处的s1 |
REPEAT(str,n) | 返回str重复n次的结果 |
SPACE(n) | 返回n个空格 |
STRCMP(s1,s2) | 比较字符串s1,s2的ASCII码值的大小 |
SUBSTR(s,index,len) | 返回字符串s的index位置其len个字符 |
LOCATE(substr,str) | 返回字符串substr在字符串str中首次出现的位置 |
ELT(m,s1,s2…sn) | 返回指定位置的字符串 m=1,就返回s1,m=2,就返回s2 |
FIELD(s,s1,s2…sn) | 返回字符串s在字符串列表中第一次出现的位置 |
FIND_IN_SET(s1,s2) | 返回字符串s1在字符串s2中出现的位置 |
REVERSE(s) | 返回s反转后的字符串 |
NULLIF(value1,value2) | 比较两个字符串,相等返回NULL,不等返回value1 |
四.日期与时间函数
1.获取日期和时间
(1)UTC:世界标准时间
函数 | 用法 |
---|---|
CURDATE(),CURRENT_DATE() | 返回当前日期,只包含年月日 |
CURTIME(),CURRENT_TIME() | 返回当前时间,只包含时分秒 |
NOW(),SYSDATE(),CURRENT_TIMESTAMP(),LOCALTIME(),LOCALTIMESTAMP() | 返回当前系统日期和时间 |
UTC_DATE() | 返回UTC日期 |
UTC_TIME() | 返回UTC时间 |
2.日期与时间戳的转换
函数 | 用法 |
---|---|
UNIX_TIMESTAMP() | 以UNIX时间戳的形式返回当前时间 |
UNIX_TIMESTAMP(date) | 将时间date以UNIX时间戳的形式返回 |
FROM_UNIXTIME(timestamp) | 将UNIX时间戳的时间转换为普通格式的时间 |
3.获取月份天数等
函数 | 用法 |
---|---|
YEAR(date),MONTH(date),DAY(date) | 返回具体的日期值 |
HOUR(time),MINUTE(time),SECOND(time) | 返回具体的时间值 |
MONTHNAME(date) | 返回月份(返回英语) |
DAYNAME(date) | 返回星期几(返回英语) |
WEEKDAY(date) | 返回周几(返回数字0-6) |
QUARTER(date) | 返回季度(1-4) |
WEEK(date),WEEKOFYEAR(date) | 返回一年中的第几周 |
DAYOFYEAR(date) | 返回日期是一年中的第几天 |
DAYOFMONTH(date) | 返回日期位于所在月份的第几天 |
DAYOFWEEK(date) | 返回周几(返回数字1-7) |
4.时间和秒钟转换的函数
函数 | 用法 |
---|---|
TIME_TO_SEC(time) | 将time转换为秒并返回 |
SEC_TO_TIME(time) | 将seconds描述转换为包含小时,分钟,和秒的时间 |
5.日期的格式化与解析
函数 | 用法 |
---|---|
DATEDIFF(date1,date2) | 返回date1-date2的间隔天数 |
TIMEDIFF(time1,time2) | 返回time1-time2的时间间隔 |
MAKETIME(hour,minute,second) | 将给定的小时分钟秒组合成时间返回 |
LAST_DAY(date) | 返回date所在月份的最后一天 |
PERIOD_ADD(time,n) | 返回time+n后的时间 |
五.流程控制函数
函数 | 用法 |
---|---|
IF(value,value1,value2) | 如果value为TRUE,返回value1,否则返回value2 |
IFNULL(vallue1,value2) | 如果value不为NULL,返回value1,否则返回value2 |
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2…END | 相当于if..else if..else |
CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值2 THEN 值2 …END | 相当于switch case |
六.加密与解密函数
函数 | 用法 |
---|---|
PASSWORD(str) | 返回str加密版本,41位的字符串,结果不可逆 |
MD5(str) | 返回字符串str的md5加密后的值,也是一种加密方法。 |
SHA(str) | 从str计算并返回加密后的字符串,比md5更安全 |
ENCODE(value,password_seed) | 返回使用password_seed作为加密密码加密value |
DECODE(value,password_seed) | 返回使用password_seed作为加密密码解密value |
七.MySQL信息函数
函数 | 用法 |
---|---|
VERSION() | 返回当前MySQL版本号 |
CONNECTION_ID() | 返回当前MySQL服务器的连接数 |
DATABASE(),SCHEMA() | 返回MySQL命令行当前所在的数据库 |
USER(),SYSTEM_USER(),SESSION_USER() | 返回当前连接MySQL的用户名,格式为:主机名@用户名 |
CHAREST(value) | 返回字符串value自变量的字符集 |
COLLATION(value) | 返回字符串value的比较规则 |