单行函数
特点
1、操作数据对象
2、接受参数返回一个结果
3、只对一行进行变换
4、每行返回一个结果
5、可以嵌套
6、参数可以是一列或一个值
数值函数
1、基本函数
函数 | 用法 |
ABS(x) | 返回 x 的绝对值 |
SIGN(x) | 返回 x 的符号。正数返回 1,负数返回 -1,0 返回 0 |
PI() | 返回圆周率的值 |
CEIL(x),CEILING(x) | 返回大于或等于某个值的最小整数 |
FLOOR(x) | 返回小于或等于某个值的最大整数 |
LEAST(e1, e2, e3…) | 返回列表中的最小值 |
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、三角函数
(1)ATAN2(M,N) 函数返回两个参数的反正切值,与 ATAN(X) 函数相比,ATAN2(M,N) 需要两个参数
(2)例如:两个点 point(x1,y1) 和 point(x2,y2),使用 ATAN(X) 函数计算反正切值为 ATAN((y2-y1)/(x2-x1)),使用 ATAN2(M,N) 计算反正切值则为 ATAN2(y2-y1,x2-x1)
(3)由使用方式可以看出,当 x2-x1 等于 0 时,ATAN(X) 函数会报错,而 ATAN2(M,N) 函数则仍然可以计算
函数 | 用法 |
SIN(x) | 返回 x 的正弦值,其中,参数 x 为弧度值 |
ASIN(x) | 返回 x 的反正弦值,即获取正弦为 x 的值。如果 x 的值不在 -1 到 1 之间,则返回 NULL |
COS(x) | 返回 x 的余弦值,其中,参数 x 为弧度值 |
ACOS(x) | 返回 x 的反余弦值,即获取余弦为 x 的值。如果 x 的值不在 -1 到 1 之间,则返回 NULL |
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 是一个常数,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 进制数变成 f2 进制数 |
字符串函数
1、MySQL 中,字符串的位置是从 1 开始
函数 | 用法 |
ASCII(S) | 返回字符串 S 中的第一个字符的 ASCII 码值 |
CHAR_LENGTH(s) | 返回字符串 s 的字符数。作用与 CHARACTER_LENGTH(s) 相同 |
LENGTH(s) | 返回字符串 s 的字节数,和字符集有关 |
CONCAT(s1, s2, ......, sn) | 连接 s1, s2, ......, sn 为一个字符串 |
CONCAT_WS(x, s1, s2, ......, sn) | 同 CONCAT(s1, s2, ...) 函数,但是每个字符串之间要加上 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(LEADING 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 个字符,作用与 SUBSTRING(s, n, len)、 MID(s, n, len) 相同 |
LOCATE(substr, str) | 返回字符串 substr 在字符串 str 中首次出现位置,作用与 POSITION(substr IN str)、INSTR(str, substr)相同,未找到,返回0 |
ELT(m, s1, s2, …, sn) | 返回指定位置的字符串,如果 m=1,则返回 s1,如果 m=2,则返回 s2,如果 m=n,则返回 sn |
FIELD(s, s1, s2, …, sn) | 返回字符串 s 在字符串列表中第一次出现的位置 |
FIND_IN_SET(s1, s2) | 返回字符串 s1 在字符串 s2 中出现的位置。其中,字符串 s2 是一个以逗号分隔的字符串 |
REVERSE(s) | 返回 s 反转后的字符串 |
NULLIF(value1, value2) | 比较两个字符串,如果 value1 与 value2 相等,则返回 NULL,否则返回 value1 |
日期和时间函数
1、获取日期、时间
函数 | 用法 |
CURDATE(),CURRENT_DATE() | 返回当前日期,只包含年、 月、日 |
CURTIME(),CURRENT_TIME() | 返回当前时间,只包含时、 分、秒 |
NOW(),SYSDATE(),CURRENT_TIMESTAMP(),LOCALTIME(),LOCALTIMESTAMP() | 返回当前系统日期和时间 |
UTC_DATE() | 返回 UTC(世界标准时间) 日期 |
UTC_TIME() | 返回 UTC(世界标准时间) 时间 |
2、获取月份、星期、星期数、天数等
函数 | 用法 |
YEAR(date) / MONTH(date) / DAY(date) | 返回具体的日期值 |
HOUR(time) / MINUTE(time) / SECOND(time) | 返回具体的时间值 |
MONTHNAME(date) | 返回月份:January,... |
DAYNAME(date) | 返回星期几:MONDAY,TUESDAY.....SUNDAY |
WEEKDAY(date) | 返回周几,注意:周一 是 0,周二 是 1,... 周日是 6 |
QUARTER(date) | 返回日期对应的季度,范围为 1~4 |
WEEK(date) , WEEKOFYEAR(date) | 返回一年中的第几周 |
DAYOFYEAR(date) | 返回日期是一年中的第几天 |
DAYOFMONTH(date) | 返回日期位于所在月份的第几天 |
DAYOFWEEK(date) | 返回周几,注意:周日是 1,周一是 2,... 周六是 7 |
3、日期的操作函数
函数 | 用法 |
EXTRACT(type FROM date) | 返回指定日期中特定的部分,type 指定返回的值 |
(1)type 取值与含义
取值 | 含义 |
MICROSECOND | 返回毫秒 |
SECOND | 返回秒 |
MINUTE | 返回分钟 |
HOUR | 返回小时 |
DAY | 返回天数 |
WEEK | 返回日期在一年中的第几个星期 |
MONTH | 返回日期在一年中的第几个月 |
QUARTER | 返回日期在一年中的第几个季度 |
YEAR | 返回日期的年份 |
SECOND_MICROSECOND | 返回秒和毫秒 |
MINUTE_MICROSECOND | 返回分钟和毫秒 |
MINUTE_SECOND | 返回分钟和秒 |
HOUR_MICROSECOND | 返回小时和毫秒 |
HOUR_SECOND | 返回小时和秒 |
HOUR_MINUTE | 返回小时和分钟 |
DAY_MICROSECOND | 返回天和毫秒 |
DAY_SECOND | 返回天和秒 |
DAY_MINUTE | 返回天和分钟 |
DAY_HOUR | 返回天和小时 |
YEAR_MONTH | 返回年和月 |
4、时间和秒钟转换
函数 | 用法 |
TIME_TO_SEC(time) | 将 time 转化为秒并返回结果值。转化的公式为: 小时 * 3600 + 分钟 * 60 + 秒 |
SEC_TO_TIME(seconds) | 将 seconds 描述转化为包含小时、分钟和秒的时间 |
5、计算日期和时间
(1)第一组
函数 | 用法 |
DATE_ADD(datetime, INTERVAL expr type),ADDDATE(date, INTERVAL expr type) | 返回与给定日期时间相差 INTERVAL 时间段的日期时间 |
DATE_SUB(date, INTERVAL expr type),SUBDATE(date, INTERVAL expr type) | 返回与 date 相差 INTERVAL 时间间隔的日期 |
(2)type 取值
间隔类型 | 含义 |
SECOND | 秒 |
MINUTE | 分钟 |
HOUR | 小时 |
DAY | 日 |
MONTH | 月 |
YEAR | 年 |
MINUTE_SECOND | 分钟和秒 |
HOUR_SECOND | 小时和秒 |
HOUR_MINUTE | 小时和分钟 |
DAY_SECOND | 天和秒 |
DAY_MINUTE | 天和分钟 |
DAY_HOUR | 天和小时 |
YEAR_MONTH | 年和月 |
(3)第二组
函数 | 用法 |
ADDTIME(time1, time2) | 返回 time1 加上 time2 的时间。当 time2 为一个数字时,代表秒 ,可以为负数 |
SUBTIME(time1, time2) | 返回 time1 减去 time2 后的时间。当 time2 为一个数字时,代表秒 ,可以为负数 |
DATEDIFF(date1, date2) | 返回 date1 - date2 的日期间隔天数 |
TIMEDIFF(time1, time2) | 返回 time1 - time2 的时间间隔 |
FROM_DAYS(N) | 返回从 0000 年 1 月 1 日起,N 天以后的日期 |
TO_DAYS(date) | 返回日期 date 距离 0000 年 1 月 1 日的天数 |
LAST_DAY(date) | 返回 date 所在月份的最后一天的日期 |
MAKEDATE(year, day) | 根据年份和一年中天数创建一个日期并返回 |
MAKETIME(hour, minute, second) | 将给定的小时、分钟、秒组合成时间并返回 |
PERIOD_ADD(time, n) | 返回 time 加上 n 后的时间 |
6、日期的格式化与解析
函数 | 含义 |
DATE_FORMAT(date,fmt) | 按照字符串 fmt 格式化日期 date 值 |
TIME_FORMAT(time,fmt) | 按照字符串 fmt 格式化时间 time 值 |
GET_FORMAT(date_type,format_type) | 返回日期字符串的显示格式 |
STR_TO_DATE(str, fmt) | 按照字符串 fmt 对 str 进行解析,解析为一个日期 |
(1)非 GET_FORMAT 函数中 fmt 参数常用的格式符
格式符 | 说明 |
%Y | 4 位数字表示年份 |
%y | 两位数字表示年份 |
%M | 月名表示月份(January, ...) |
%m | 两位数字表示月份 (01,02,03 ...) |
%b | 缩写的月名(Jan.,Feb.,...) |
%c | 数字表示月份(1,2,3 ...) |
%D | 英文后缀表示月中的天数(1st,2nd,3rd ...) |
%d | 两位数字表示月中的天数(01,02 ...) |
%e | 数字形式表示月中的天数 (1,2,3,4,5 ...) |
%H | 两位数字表示小时,24 小时制(01,02 ...) |
%h 和 %I | 两位数字表示小时,12 小时制(01,02 ...) |
%k | 数字形式的小时,24 小时制(1,2,3 ...) |
%l | 数字形式表示小时,12 小时制(1,2,3,4 ...) |
%i | 两位数字表示分钟(00,01,02 ...) |
%S 和 %s | 两位数字表示秒(00,01,02 ...) |
%W | 一周中的星期名称(Sunday ...) |
%a | 一周中的星期缩写(Sun.,Mon.,Tues.,...) |
%w | 以数字表示周中的天数(0=Sunday,1=Monday ...) |
%j | 以 3 位数字表示年中的天数(001,002 ...) |
%U | 以数字表示年中的第几周(1,2,3 ...)其中 Sunday 为周中第一天 |
%u | 以数字表示年中的第几周(1,2,3 ...)其中 Monday 为周中第一天 |
%T | 24 小时制 |
%r | 12 小时制 |
%p | AM 或 PM |
%% | 表示 % |
(2)GET_FORMAT 函数中 date_type 和 format_type 参数取值
日期类型 | 格式化类型 | 返回的格式化字符串 |
DATE | USA | %m.%d.%Y |
DATE | JIS | %Y-%m-%d |
DATE | ISO | %Y-%m-%d |
DATE | EUR | %d.%m.%Y |
DATE | INTERNAL | %Y%m%d |
TIME | USA | %h:%i:%s%p |
TIME | JIS | %H:%i:%s |
TIME | ISO | %H:%i:%s |
TIME | EUR | %H.%i.%s |
TIME | INTERNAL | %H%i%s |
DATETIME | USA | %Y-%m-%d%H.%i.%s |
DATETIME | JIS | %Y-%m-%d%H:%i:%s |
DATETIME | ISO | %Y-%m-%d%H:%i:%s |
DATETIME | EUR | %Y-%m-%%d%H.%i.%s |
DATETIME | INTERNAL | %Y%m%d%H%i%s |
流程处理函数
1、根据不同的条件,执行不同的处理流程,可以在 SQL 语句中实现不同的条件选择
函数 | 用法 |
IF(value, value1, value2) | 如果 value 的值为 TRUE,返回 value1, 否则返回 value2 |
IFNULL(value1, value2) | 如果 value1 不为 NULL,返回 value1,否则返回 value2 |
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ... [ELSE resultn] END | 相当于 Java 的 if...else if...else... |
CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN 值1 ... [ELSE 值n] END | 相当于 Java 的 switch...case... |
加密与解密函数
函数 | 用法 |
PASSWORD(str) | 返回字符串 str 的加密版本,41 位长的字符串。加密结果不可逆 ,常用于用户的密码加密 |
MD5(str) | 返回字符串 str 的 md5 加密后的值,若参数为 NULL,则会返回 NULL |
SHA(str) | 从原明文密码 str 计算并返回加密后的密码字符串,当参数为 NULL 时,返回 NULL |
ENCODE(value,password_seed) | 返回使用 password_seed 作为加密密码加密 value |
DECODE(value,password_seed) | 返回使用 password_seed 作为加密密码解密 value |
信息函数
1、帮助数据库开发或运维人员更好地对数据库进行维护工作
函数 | 用法 |
VERSION() | 返回当前 MySQL 的版本号 |
CONNECTION_ID() | 返回当前 MySQL 服务器的连接数 |
DATABASE(),SCHEMA() | 返回 MySQL 命令行当前所在的数据库 |
USER(),CURRENT_USER()、SYSTEM_USER(), SESSION_USER() | 返回当前连接 MySQL 的用户名,返回结果格式为:主机名@用户名 |
CHARSET(value) | 返回字符串 value 自变量的字符集 |
COLLATION(value) | 返回字符串 value 的比较规则 |
其他函数
函数 | 用法 |
FORMAT(value, n) | 返回对数字 value 进行格式化后的结果数据,n 表示四舍五入后保留到小数点后 n 位 |
CONV(value, from, to) | 将 value 的值进行不同进制之间的转换 |
INET_ATON(ipvalue) | 将以点分隔的 IP 地址转化为一个数字 |
INET_NTOA(value) | 将数字形式的 IP 地址转化为以点分隔的 IP 地址 |
BENCHMARK(n, expr) | 将表达式 expr 重复执行 n 次,用于测试 MySQL 处理 expr 表达式所耗费的时间 |
CONVERT(value USING char_code) | 将 value 所使用的字符编码修改为 char_code |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战