MySQL函数
大约 9 分钟约 2794 字
MySQL函数就是MySQL数据库提供的内置函数,可以帮助用户更好地的处理数据表中的数据。下表列举了MySQL内置函数的类别和这些函数的使用范围以及作用。
函数 | 作用 |
---|---|
数学函数 | 用于处理数字。其中包括绝对值函数、正弦函数、随机数函数等。 |
字符串函数 | 用于处理字符串,其中包括字符串连接函数、字符串比较函数、大小写字母转换函数等。 |
日期和时间函数 | 用于处理时间和日期。其中包括获取获取当前时间的函数、获取当前日期的函数、返回年份的函数和返回日期的函数。 |
条件判断函数 | 用于在SQL中控制条件选择。其中包括IF、CASE和WHEN语句等。 |
系统信息函数 | 用于获取SQL数据库的系统信息。其中包括获取数据库名的函数、获取当前用户的函数和获取数据库版本的函数等。 |
加密函数 | 用于对字符串进行加密和解密。其中包含字符串加密函数和字符串解密函数。 |
其他函数 | 包括格式化函数和锁函数等。 |
数学函数
数学函数是MySQL中常用的一类函数,主要用于处理数字,包括整型和浮点型数等。常用的数学函数如下表:
函数 | 作用 |
---|---|
ABS(x) | 返回x的绝对值 |
CEIL(x),CEILIN(x) | 返回不小于x的最小整数值 |
FLOOR(x) | 返回不大于x的最大整数值 |
RAND() | 返回0~1的随机数 |
RAND(x) | 返回0~1的随机数,x相同时返回的随机数相同 |
SIGN(x) | 返回参数的符号,x的值分别为负数、0和正数时返回结果分别是-1、0、1 |
PI() | 返回圆周率的值 |
TRUNCATE(x,y) | 返回数值x保留到小数点后y位的值 |
ROUND(x) | 返回离x最近的整数 |
ROUND(x,y) | 保留x小数点后y位的值,但截断会使用四舍五入 |
POW(x,y),POWER(x,y) | 返回x的y乘方的结果值 |
SQRT(x) | 返回非负数x的二次方根 |
EXP(x) | 返回e的x乘方后的值 |
MOD(x,y) | 返回x除以y的余数 |
LOG(x) | 返回x的基数为2的对数 |
LOG10(x) | 返回x的基数为10的对数 |
RADIANS(x) | 将x转换为弧度 |
DEGREES(x) | 将x转换为角度 |
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),ATAN2(x,y) | 返回两个变量x及y的反正切。它类似于x或y的反正切计算,除非两个参数的符号均用于结果所在象限 |
COT(x) | 返回x的余切,其中x为弧度值 |
字符串函数
常用的字符串函数如下表:
函数 | 作用 |
---|---|
CHAR_LENGTH(s) | 返回s的字符数 |
LENGTH(x) | 返回值为字符串x的长度,单位为字节。 |
CONCAT(s1,s2,...) | 返回结果为连接参数产生的字符串。若有一个参数为NULL则返回值为NULL,若所有参数均为非二进制字符串则结果为非二进制字符串;若参数中有一个是二进制字符串则结果为二进制字符串;一个数字参数会被转换成与之相等的二进制字符串格式,要避免此情况可以使用显示类型cast。 |
CONCAT_WS(x,s1,s2,...) | 同CONCAT(x)函数,但是每个字符串要加上x |
INSERT(x1,x,len,s2) | 将字符串s1的x位置开始、长度为len的字符串替换成s2 |
UPPER(s),UCASE(s) | 将字符串s的所有字母都变成大写字母 |
LOWER(s),LCASE(s) | 将字符串s的所有字母都变成小写字母 |
LEFT(s,n) | 返回字符串s的开始的最左n个字符 |
RIGHT(s,n) | 返回从字符串s的最右n个字符 |
LPAD(s1,len,s2) | 返回字符串s1,其左边由字符s2填补到len字符长度。假如s1的长度大于len,则返回值被缩短至len字符 |
RPAD(s1,len,s2) | 返回字符串s1,其右边被字符串s2填补至len字符长度 |
LTRIM(s) | 将字符串s的前导空格删除后返回s |
RTRIM(s) | 将字符串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 |
STRCMP(s1,s2) | 比较字符串s1和s2 |
SUNSTRING(s,n,len) | 获取从字符串s中的第n个位置开始、长度为len的字符串 |
MID(s,n,len) | 同SUBSTRING(s,n,len) |
LOCATE(s1,s),POSITION(s1 in s) | 从字符串s中的获取s1的开始位置 |
INSTR(s,s1) | 查找字符串s1在s中的位置,返回首次出现位置的索引值 |
REVERSE(s) | 将字符串s的顺序反过来 |
ELT(n,s1,s2,...) | 返回第n个字符串 |
EXPORT_SET(bits,on,off,[,separator[,number_of_bits]]) | 返回一个字符串,生成规则如下:针对bits的二进制模式,如果其位为1,则返回一个on值;如果其位为0,则返回一个off值。每个字符串采用separator进行分隔,默认值为“,”。number_of_bits参数指定bits可用的位数,默认为64位。例如,生成数字位182的二进制(10110110)替换格式,以“@”作为分隔符,设置有效位为6位。其语句如下:select EXPORT_SET(182,‘Y’,‘N’,‘@’,6);其运行结果为:N@Y@Y@N@Y@Y |
FIELD(s,s1,s2,...) | 返回一个与字符串s匹配的字符串的位置 |
FIND_IN_SET(s1,s2) | 返回在字符串s2中与s1匹配的字符串的位置 |
MAKE_SET(x,s1,s2,...) | 按x的二进制数从s1,s2,...中选取字符串 |
日期时间函数
常用的日期时间函数如下:
函数 | 作用 |
---|---|
CURDATE(),CURRENT_DATE() | 返回当前日期 |
CURTIME(),CURRENT_TIME() | 返回当前时间 |
CURRENT_TIMESTAMP(),LOCALTIME() | 返回当前日期和时间 |
NOW(),SYSDATE(),LOCALTIMESTAMP() | 返回当前日期和时间 |
UNIX_TIMESTAMP() | 以UNIX时间戳的形式返回当前时间 |
UNIX_TIMESTAMP(d) | 将时间d以UNIX时间戳的形式返回 |
FROM_UNIXTIME(d) | 以UNIX时间戳的时间转换为普通格式的时间戳 |
UTC_DATE() | 返回UTC日期 |
UTC_TIME() | 返回UTC时间 |
MONTH(d) | 返回日期d中的月份值,范围是1~12 |
MONTHNAME(d) | 返回日期d中的月份名称 |
DAYNAME(d) | 返回日期d是星期几,如Monday |
DAYOFWEEK(d) | 返回日期d是星期几,0是星期一,1是星期二等 |
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、HOUR等 |
TIME_TO_SEC(t) | 将时间t转换为秒 |
SEC_TO_TIME(s) | 将以秒为单位的时间s转换为时分秒的格式 |
TO_DAYS(d) | 计算日期d从0000年1月1日的天数 |
FROM_DAYS(n) | 计算从0000年1月1日开始天后的日期 |
DATEDIFF(d1,d2) | 计算日期d1和d2相隔的天数 |
ADDDATE(d,n) | 计算起始日期d加上n天后的日期 |
ADDDATE(d,INTERVAL expr type) | 计算起始日期加上一个时间段后的日期 |
DATE_ADD(d,INTERVAL expr type) | 同ADDDATE(d,INTERVAL n type) |
SUBDATE(d,n) | 计算起始日期d减去n天后的日期 |
SUBDATE(d,INTERVAL expr type) | 计算起始日期d减去一个时间段的日期 |
ADDTIME(t,n) | 计算起始时间t加上n秒的时间 |
SUBTIME(t,n) | 计算起始时间t减去n秒的时间 |
DATE_FORMAT(d,f) | 按照表达式f的要求显示日期d |
TIME_FORMAT(t,f) | 按照表达式f的要求显示时间d |
GET_FORMAT(type,s) | 根据字符串s获取type型数据的显示格式 |
条件判断函数
条件判断函数如下:
函数 | 作用 |
---|---|
IF(expr,v1,v2) | 若表达式expr成立,则执行v1,否则执行v2 |
IFNULL(v1,v2) | 若v1不为空则返回v1的值,否则返回v2的值 |
CASE WHEN expr1 THEN v1 [WHEN expr2 THEN v2 ...][ELSE vn] END | case表示函数开始,end表示语句结束。若表达式expr1成立则返回v1的值;若表达式expr2成立则返回v2的值,以此类推,最后遇到ELSE时返回vn的值。 |
系统信息函数
常用的系统信息函数如下:
函数 | 作用 |
---|---|
VERSION() | 获取数据库的版本号 |
CONNECTION_ID() | 获取数据库的连接数 |
DATABASE(),SCHEMA() | 获取当前数据库名 |
USER(),SYSTEM_USER(),SESSION_USER() | 获取当前用户 |
CURRENT_USER(),CURRENT_USER | 获取当前用户 |
CHAR_SET(str) | 获取字符串str的字符集 |
COLLATION(str) | 获取字符串str的字符排列方式 |
LAST_INSERT_ID() | 获取最近生成的AUTO_INCREMENT值 |
其他函数
MySQL中的其他函数如下:
函数 | 作用 |
---|---|
FORMAT(x,n) | 将数字x进行格式化,将x保留到小数点后6位。这个过程需要四舍五入 |
ASCII(s) | 返回字符串s的第一个字符的ASCII码 |
BIN(x) | 返回x的二进制编码 |
HEX(x) | 返回x的十六进制编码 |
OCT(x) | 返回x的八进制编码 |
CONV(x,f1,f2) | 将x从f1进制数变成f2进制数 |
INET_ATON(IP) | 将IP地址转换成数字显示 |
INET_NTOA(N) | 将数字N转换成IP的形式 |
GET_LOCK(name,time) | 定义一个名称为name、持续时间为time秒的锁。锁定成功返回1,锁定失败返回0,若遇到错误则返回NULL |
RELEASE_LOCK(name) | 解除名称为name的锁。若解锁成功则返回1,若尝试超时返回0,若遇到错误则返回NULL |
IS_FREE_LOCK(name) | 判断是否使用名为name的锁。若使用则返回0,否则返回1 |
BENCHMARK(count,expr) | 将表达式expr重复执行count次 |
CONVERT(s using cs) | 将字符串s的字符集变为cs |
CAST(x AS type), CONVERT(x,type) | 将x变为type类型,这两个函数只对BINARY、CHAR、DATE、DATETIME、TIME、SIGNED INTEGER、UNSIGNED INTEGER类型起作用。这两种方法只是改变了输出值的数据类型,并没有改变表中字段的类型 |