数据库
首页 > 数据库> > MySQL教程 - 内建函数(Function)

MySQL教程 - 内建函数(Function)

作者:互联网

更新记录
转载请注明出处。
2022年9月3日 发布。
2022年9月3日 从笔记迁移到博客。

内建函数

主要的函数类型

数学函数

字符串函数

日期和时间函数

条件判断函数

系统信息函数

加密函数

其他函数

数值函数

ABS(X)              -- 绝对值
CEIL(X)             -- 天花板函数
CEILING(X)          -- 天花板函数
FLOOR(X)            -- 地板函数
RAND()              -- 随机数,0~1随机数
RAND(X)             -- 随机数(带种子)
ROUND(X)            -- 四舍五入(取整)
ROUND(X,Y)          -- 四舍五入(保留y位小数)
SIGN(X)             -- 返回符号(-1、0、1)
TRUNCATE(X,Y)       -- 截取(小数点后Y位)
POW(X,Y)            -- 次方
POWER(X,Y)          -- 次方
PI()                -- 圆周率
SQRT(X)             -- 开平方
EXP(x)              -- e的乘方
MOD(X,Y)            -- 求余数
LOG(X)              -- x的自然对数
LOG10(X)            -- x的e对数
BIN(X)              -- 转为二进制
RADIANS(X)          -- 角度转为弧度
DEGREES(X)          -- 弧度转为角度
SIN(X)              -- 正弦
ASIN(X)             -- 反正弦
COS(X)              -- 余弦
ACOS(X)             -- 反余弦
TAN(X)              -- 余弦
ATAN(x)             -- 反余弦
COT(x)              -- 余切

字符串函数

LENGTH(str)                 -- 获取字符串字节长度
CHAR_LENGTH(str)           -- 获取字符串个数,字符个数
CONCAT(S1,S2....)        -- 连接字符串(有一个参数为NULL,结果为NULL)
CONCAT_WS(X,S1,S2)         -- 连接字符串(带分隔符)
INSERT(S1,START,LEN,S2)    -- 替换(S1/S2一个参数为NULL,结果为NULL)
UPPER(str)                  -- 转为大写
LOWER(str)                  -- 转为小写
UCASE(str)                  -- 转为大写
LCASE(str)                  -- 转为小写
LEFT(S,N)                   -- 获得左起N个字符串
RIGHT(S,N)                  -- 获得右起N个字符串
LPAD(S1,LEN,S2)             -- 将S1左边填充到LEN长度使用S2
RPAD(S1,LEN,S2)             -- 将S1右边填充到LEN长度使用S2
TIRM(str)                   -- 删除空白
TIRM(str1 FROM str2)       -- 删除指定空白,str1
LTRIM(str)                  -- 删除左空白
RTRIM(str)                  -- 删除右空白
TRIM(strdel from str)      -- 删除str两端的strdel
REPEAT(S,N)                 -- 字符串S重复N次,参数有null,结果为null
SPACE(N)                    -- 生成N个空格
REPLACE(S,S1,S2)            -- 使用S2代替S中的S1
STRCMP(S1,S2)               -- 比较字符串(-1,0,1)
SUBSTRING(S,START,LEN)      -- 获取子串
MID(S,START,LEN)            -- 获取子串,同SUBSTRING
LOCATE(str1,str)            -- 获得子串在主串的开始位置
POSITION(str1 IN str)       -- 获得子串在主串的开始位置
INSTR(str,str1)             -- 获得子串在主串的开始位置
REVERSE(S)                  -- 反转字符串
ELT(POSITION,S1,S2,S3..)    -- 返回指定位置的字符串
FILED(S,S1,S2,...)          -- 获得S与后续字符串匹配的位置
FIND_IN_SET(S1,S2)          -- 获得S1在S2出现的位置。
						  EG:FIND_IN_SET('Hi','Hi,panda')

注意:MySQL中字符串起始位置为1

日期和时间函数

日期格式:YYYY-MM-DD

时间格式:HH:MM:SS

NOW()                   -- 获得当前日期和时间字符串
CURRENT_TIMESTAMP()     -- 获得当前日期和时间字符串
LOCALTIMESTAMP()        -- 获得当地日期和时间字符串
SYSDATE()               -- 获得系统日期时间
LOCALTIME()             -- 获得当地日期时间
CURRENT_DATE()          -- 获得当前YYYY-MM-DD日期字符串
CURRENT_TIME()          -- 获得当前HH:MM:SS时间字符串
CURDATE()               -- 获得当前YYYY-MM-DD日期字符串
CURTIME()               -- 获得当前HH:MM:SS时间字符串
TIME()                  -- 获得当前时间戳
UNIX_TIMESTAMP()        -- 返回当前时间的UNIX时间戳
UNIX_TIMESTAMP(d)       -- 返回指定时间的UNIX时间戳
FROM_UNIXTIME(d)        -- 把UNIX时间戳转为普通格式时间
UTC_DATE()              -- 获得UTC日期
UTC_TIME()              -- 获得UTC时间
DAYNAME(date)           -- 获得日期中的星期,结果范围:英语星期单词
WEEKDAY(date)           -- 获得日期中的星期索引(周一为0)
DAYOFWEEK(date)         -- 获得日期中的星期索引(周日为1)
WEEK(date)              -- 获得日期中的年中第几周,结果范围:0~53
WEEKOFYEAR(date)        -- 获得日期中的年中第几周,结果范围1~53
DAYOFYEAR(date)         -- 获得日期中的年中的第几天
DAYOFMONTH(date)        -- 获得日期中的月中的第几天
YEAR(date)              -- 获得日期中的年份
MONTH(date)             -- 获得日期中的月份,结果范围1~12
MONTHNAME(date)         -- 获得日期中的月份,结果范围:英语月份单词
QYARTER(date)           -- 获得日期中的日期的季度,结果范围:1~4
HOUR(time)              -- 获得指定时间的小时数
MINUTE(time)            -- 获得指定时间的分钟数
SECOND(time)            -- 获得指定时间的秒数
TIME_TO_SEC(time)       -- 时间转为秒数
SEC_TO_TIME(second)     -- 秒数转为时间
TO_DAYS(d)              -- 计算日期d到0000年的1月1日天数
FROM_DAYS(n)            -- 计算从0000年1月1日开始那天后的日期
EXTRACT(type FROM date) -- 获取日期中的部分。
                        -- type可以是year/month/hour/second等
DATEDIFF(d1,d2)         -- 计算日期d1~d2之间相隔的天数
ADDDATE(d,n)            -- 计算日期d加上n天后的日期
ADDDATE(d,INTERVAL type)-- 计算日期d加上一段时间后的日期
DATE_ADD(d,INTERVAL type) -- 计算日期d加上一段时间后的日期
SUBDATE(d,n)            -- 计算日期d减去n天后的日期
SUBDATE(d,INTERVAL type) -- 计算日期d减去上一段时间后的日期
ADDTIME(t,n)            -- 计算时间t加上n秒后的时间
SUBTIME(t,n)            -- 计算时间t减去n秒后的时间
DATE_FORMAT(d,format)   -- 按照format要求格式化日期d
TIME_FORMAT(t,format)   -- 按照format要求格式化时间t
GET_FORMAT(type, s)     -- 根据字符串说的type类型数据的显示格式

注意:type可取值为:

image

注意:格式化字符:

image
image

备注:ADDDATE(d,INTERVAL expr type)实例:

SELECT ADDDATE('2017-9-5 17:00',INTERVAL '1' YEAR);

image

SELECT ADDDATE('2017-9-5 17:00',INTERVAL '1 1' YEAR_MONTH);

image

备注:DATE_FORMAT(d, format)实例

SELECT DATE_FORMAT('2017-9-5','%y年 %M月 %d日 %j天数');

image

条件判断函数

如果EXPRESSION成立(不为FALSE,不等于NULL),输出V1,否则输出V2

IF(EXPRESSION, V1, V2)

如果V1不是NULL,输出V1,否则输出V2

IFNULL(V1,V2)

当exp1满足则返回v1,否则当exp2满足则返回v2,以此类推,都不满足返回vn

CASE 表示开始,END 表示结束

CASE
WHEN exp1 THEN v1
[WHEN exp2 THEN v2.....]
[ELSE vn]
END

CASE 表示开始,END 表示结束

当exp等于e1返回v1,当exp等于e2返回v2,以此类推,都不满足返回vn

CASE exp
WHEN e1 THEN v1 
[WHEN e2 THEN v2....] 
ELSE vn
END

统计函数

COUNT()             //计数
SUM()               //总和
MIN()               //最小值
MAX()               //最大值
AVG()               //平均数

系统信息函数

VERSION()           -- 获得MySQL版本
CONNECTION_ID()     -- 获得当前服务器连接次数
SHOW PROCESSLIST;   -- 显示详细连接信息
DATABASE()          -- 获得当前使用的数据库
SCHEMA()            -- 获得当前使用的数据库
USER()              -- 获得当前的用户
CURRENT_USER()      -- 获得当前的用户
SYSTEM_USER()       -- 获得当前的用户
SESSION_USER()      -- 获得当前的用户
CHARSET(str)        -- 获得当前字符串使用的字符集
COLLATION(str)      -- 获得当前字符串使用的排列方式
LAST_INSERT_ID()    -- 获得最后一次插入的Id

加密函数

对str进行加密,该加密不可逆

PASSWORD(str)

对str进行MD5进行加密,结果为32位,参数为NULL,结果为NULL

MD5(str)

可逆的加解密

注意加密后的返回的是BLOB二进制类型

ENCODE(被加密str,秘钥str);

DECODE(被解密str,秘钥str);

其他函数

格式化函数

将X四舍五入保留N位小数
注意:结果带有千分位

FORMAT(X,N)

转换函数

将s的第一个字符转为ASCII码

ASCII(s)

将x从十进制转为二进制编码

BIN(X)

将x从十进制转为八进制编码

OCT(X)

将x从十进制转为十六进制编码

HEX(X)

将x从F1进制转为F2进制

CONV(X,F1,F2)

IP地址转换函数

将IP地址字符串转为数字

INET_ATON('127.0.0.1')

将数字转为IP地址字符串

INET_NTOA(2130706433)

锁函数

设置一个名为name时间为time(单位:s)的锁

注意:创建新锁,旧锁将解除

成功返回1,超时返回0,错误返回NULL

GET_LOCK(name,time)

释放一个名为name的锁

成功返回1,超时返回0,错误返回NULL

RELEASE_LOCK(name)

检测一个名为name的锁是否工作中

未使用返回1,使用中返回0

错误返回NULL

IS_FREE_LOCK(name)

重复执行函数

BENCHMARK(count,expression)

将expression重复执行count遍
可以用于计算运行效率

字符集编码转换函数

CONVERT(s USING cs)

将s的字符串转为cs编码
EG:

SELECT CONVERT('panda' USING 'UTF8');

数据转换函数

将x转为type类型

CAST(x AS type)

注意:只是改变输出类型,不改变本身
注意:只对BINARY/CHAR/DATE/DATETIME/TIME/SIGNED INTEGER/ UNSIGNED INTEGER有作用

EG:

SELECT CAST(123 AS CHAR);

将x转为type类型

CONVERT(x,type)

注意:只是改变输出类型,不改变本身
注意:只对BINARY/CHAR/DATE/DATETIME/TIME/SIGNED INTEGER/ UNSIGNED INTEGER有作用

EG:

SELECT CONVERT(123 ,CHAR);

标签:Function,函数,--,日期,获得,内建函数,str,MySQL,字符串
来源: https://www.cnblogs.com/cqpanda/p/16652022.html