一.函数概述

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的比较规则