(八)MySQL数据库-常用函数

  • 数学函数
  • ABS求绝对值
  • RAND随机数
  • ROUND四舍五入
  • LOG对数运算
  • SQRT求平方根
  • MOD求余
  • CEIL、CEILING向上取整
  • FLOOR向下取整
  • SIGN获取正负
  • POW、POWER幂运算
  • BIN求二进制
  • CONV进制转换
  • 聚集函数
  • AVG平均数
  • COUNT统计行数
  • MAX最大值
  • MIN最小值
  • SUM求和
  • 字符串函数
  • CONCAT参数连接为字符串
  • CONCAT_WS参数连接为字符串(加分隔符)
  • ASCII 返回第一位对应的ASCII值
  • CHAR_LENGTH、LENGTH字符长度
  • ELT区第N个参数
  • FIELD查找列表中字符位置
  • FIND_IN_SET查找字符串列表中字符位置
  • INSTR查找字符串中字符串位置
  • POSITION查找字符串中字符串位置
  • LOCATE查找字符串中字符串位置(指定位置)
  • FORMAT数字格式化
  • INSERT按位置替换字符串
  • REPLACE按字符串替换字符串
  • LEFT 取左侧字符
  • RIGHT取左侧字符
  • SUBSTRING、SUBSTRING第N位开始截取字符串
  • LOWER转化为小写
  • UPPER转化为大写
  • REPEAT将字符串重复N次
  • REVERSE字符串倒序
  • RPAD填充到指定长度
  • TRIM剔除指定字符串,去空格
  • 日期和时间函数
  • NOW语句开始执行的时间
  • sysdate 动态获取时间
  • curdate获取日期
  • curtime 获取时间
  • EXTRACT时间选取函数
  • WEEKDAY星期索引
  • DAYNAME星期名
  • DAYOFMONTH 返回日
  • DAYOFYEAR一年中的第几天
  • MONTH月份索引
  • MONTHNAME月份名
  • QUARTER季度
  • LAST_DAY 某月最后一天
  • ADDDATE N天后的时间
  • ADDTIME N秒后的时间
  • DATE_ADD 指定时间后的时间
  • SUBDATE N天前的时间
  • SUBTIME N秒前的时间
  • DATE_SUB 指定时间后的时间
  • DATEDIFF日期间隔
  • DATE_FORMAT格式化
  • 加密解密函数
  • ENCODE加密
  • DECODE解密
  • MD5加密
  • 类型转换函数
  • 系统信息函数
  • VERSION服务版本号
  • CONNECTION_ID客户端标识ID
  • DATABASE、SCHEMA 当前数据库
  • USER、*_USER 当前用户
  • LAST_INSERT_ID 最近的自增ID


我的系统版本为CentOS7.5,MySQL版本为5.7.26

数学函数

使用格式:一般用于插入、修改语句中,直接 函数(参数) 即可,把返回结果用于插入、修改。
可以使用select 函数名进行验证函数的作用

ABS求绝对值

返回 x 的绝对值

ABS(x)

RAND随机数

返回0到1的随机数

select rand()

ROUND四舍五入

得到X的Y位四舍五入小数,如果没有Y,代表四舍五入求整

ROUND(X,Y)

LOG对数运算

得到以x为底,y的对数

LOG(x,y)

SQRT求平方根

得到x的平方根

SQRT(x)

MOD求余

x对y求余

MOD(x,y)

CEIL、CEILING向上取整

向上取整

CEIL(x)
CEILING(x)

FLOOR向下取整

向下取整

FLOOR(x)

SIGN获取正负

返回x的符号,-1为负数,0不变,1为正数

SIGN(x)

POW、POWER幂运算

幂运算,求x的y次方幂

POW(x,y)
POWER(x,y)

BIN求二进制

BIN(N):返回N的二进制值

CONV进制转换

不同进制的转换。返回str字符串由from_base进制转化为 to_base 进制的数字串表示

CONV(15,10,2)

聚集函数

使用格式:聚集函数一般是配合GROUP BY语句使用的,也可以用于统计整表、整列

AVG平均数

返回某列的平均值

AVG()

COUNT统计行数

返回某列/某组/整表的行数(即记录数)

COUNT()

MAX最大值

返回某列的最大值

MAX()

MIN最小值

返回某列的最小值

MIN()

SUM求和

返回某个列之和

SUM()

字符串函数

字符串函数的使用格式:select 函数(参数) from 表

CONCAT参数连接为字符串

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL

SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook")

CONCAT_WS参数连接为字符串(加分隔符)

同 CONCAT() 函数,但是每个字符串直接要加上 x,x 可以是分隔符

SELECT CONCAT_WS("-" , "SQL ", "Runoob ", "Gooogle ", "Facebook")

ASCII 返回第一位对应的ASCII值

返回字符串str 的最左字符的十进制数值。假如str为空字符串,则返回值为 0 。假如str 为NULL,则返回值为 NULL。 ASCII()用于带有从 0到255的数值的字符。

ASCII("str")

CHAR_LENGTH、LENGTH字符长度

返回值为字符串str 的长度,长度的单位为字符

CHAR_LENGTH(str)
LENGTH(str)

ELT区第N个参数

返回第一个参数后面的第N个参数。若N = 1,则返回值为 str1 ,若N = 2,则返回值为 str2 ,以此类推

ELT(N,str1,str2,str3)

FIELD查找列表中字符位置

返回str1, str2, str3,……列表中的str 的位置。在找不到str 的情况下,返回值为 0

SELECT FIELD("c", "a", "b", "c", "d", "e");

FIND_IN_SET查找字符串列表中字符位置

返回在字符串s2中与s1匹配的字符串的位置

SELECT FIND_IN_SET("c", "a,b,c,d,e");

INSTR查找字符串中字符串位置

返回字符串 str 中子字符串substr的第一个出现位置

SELECT INSTR("abcdec", "c");

POSITION查找字符串中字符串位置

返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0,与INSTR一样,只是用法不同

SELECT POSITION("c" IN "abcdec");

LOCATE查找字符串中字符串位置(指定位置)

返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0

SELECT LOCATE("c", "abcdec",4);

FORMAT数字格式化

将number X设置为格式 ‘#,###,###.##’, 以四舍五入的方式保留到小数点后D位, 而返回结果为一个字符串。

SELECT FORMAT(250500.5634, 2);     -- 输出 250,500.56

INSERT按位置替换字符串

字符串 str的pos到len长的位置被newstr替换

SELECT INSERT("google.com", 1, 6, "runnob");  -- 输出:runoob.com

REPLACE按字符串替换字符串

把str中的from_str内容替换为to_str

REPLACE(str,from_str,to_str)

LEFT 取左侧字符

返回字符串 s 的前 n 个字符

SELECT LEFT("abcdec",4);

RIGHT取左侧字符

返回字符串 s 的后 n 个字符

SELECT RIGHT("abcdec",4);

SUBSTRING、SUBSTRING第N位开始截取字符串

字符串str返回一个子字符串,起始于位置 pos

SUBSTRING(str,pos)
SUBSTRING(str FROM pos)

LOWER转化为小写

把str全部变为小写

LOWER(str)

UPPER转化为大写

把str转为大写

UPPER(str)

REPEAT将字符串重复N次

str重复count次而成的新字符串

REPEAT(str,count)

REVERSE字符串倒序

把str倒序

REVERSE(str)

RPAD填充到指定长度

把str用padstr填充到len长

RPAD(str,len,padstr)

TRIM剔除指定字符串,去空格

从str中删除remstr

TRIM(remstr FROM str)

剔除str前后的空格

TRIM(str)

日期和时间函数

NOW语句开始执行的时间

NOW():返回该条语句【注意,是该条语句,而不是该函数。区别在于下面的sysdate()函数】运行时的具体日期时间

select NOW();    ----2016-09-12 21:25:06

sysdate 动态获取时间

日期时间函数跟 now() 类似,不同之处在于:now() 在语句执行开始时值就得到了, sysdate() 在函数执行时动态得到值。

mysql> select now(), sleep(3), now();
+---------------------+----------+---------------------+
| now()               | sleep(3) | now()               |
+---------------------+----------+---------------------+
| 2019-05-03 12:03:49 |        0 | 2019-05-03 12:03:49 |
+---------------------+----------+---------------------+

mysql> select sysdate(), sleep(3), sysdate();
+---------------------+----------+---------------------+
| sysdate()           | sleep(3) | sysdate()           |
+---------------------+----------+---------------------+
| 2019-05-03 12:04:17 |        0 | 2019-05-03 12:04:20 |
+---------------------+----------+---------------------+

可以看到,虽然中途 sleep 3 秒,但 now() 函数两次的时间值是相同的; sysdate() 函数两次得到的时间值相差 3 秒

curdate获取日期

获取当前日期

curdate()

curtime 获取时间

获得当前时间(time)函数

curtime()

EXTRACT时间选取函数

选取日期时间的各个部分:日期、时间、年、季度、月、日、小时、分钟、秒、微秒
EXTRACT(type FROM d)

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

WEEKDAY星期索引

返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)

select WEEKDAY(now());

DAYNAME星期名

返回date的星期名字,比如:Friday

select DAYNAME(now());

DAYOFMONTH 返回日

返回date的月份中日期,在1到31范围内

select DAYOFMONTH(now());

DAYOFYEAR一年中的第几天

返回date在一年中的日数, 在1到366范围内

select DAYOFYEAR(now());

MONTH月份索引

返回date的月份,范围1到12

select MONTH(now());

MONTHNAME月份名

返回date的月份名字

select MONTHNAME(now());

QUARTER季度

返回date一年中的季度,范围1到4

select QUARTER(now());

LAST_DAY 某月最后一天

某月最后一天

select LAST_DAY('2019-5-3');
select LAST_DAY(now());

ADDDATE N天后的时间

计算起始日期 d 加上 n 天的日期

select ADDDATE(now(),5);

ADDTIME N秒后的时间

时间 t 加上 n 秒的时间

select ADDTIME(now(),500);

DATE_ADD 指定时间后的时间

计算起始日期 d 加上一个时间段后的时间

select ADDDATE(now(),1);        (默认是天)

select ADDDATE(now(), INTERVAL 5 MINUTE);   (TYPE的取值与EXTRACT时间选取函数类似)

SUBDATE N天前的时间

计算起始日期 d 减去 n 天的日期

select SUBDATE(now(),5);

SUBTIME N秒前的时间

时间 t 减去 n 秒的时间

select SUBTIME(now(),500);

DATE_SUB 指定时间后的时间

计算起始日期 d 加上一个时间段后的时间

select DATE_SUB(now(),1);        (默认是天)

select DATE_SUB(now(), INTERVAL 5 MINUTE);   (TYPE的取值与EXTRACT时间选取函数类似)

DATEDIFF日期间隔

计算日期 d1->d2 之间相隔的天数

select DATEDIFF('2019-5-6',now());

DATE_FORMAT格式化

DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
语法:
DATE_FORMAT(date,format)

格式

描述

%a

缩写星期名

%b

缩写月名

%c

月,数值

%D

带有英文前缀的月中的天

%d

月的天,数值(00-31)

%e

月的天,数值(0-31)

%f

微秒

%H

小时 (00-23)

%h

小时 (01-12)

%I

小时 (01-12)

%i

分钟,数值(00-59)

%j

年的天 (001-366)

%k

小时 (0-23)

%l

小时 (1-12)

%M

月名

%m

月,数值(00-12)

%p

AM 或 PM

%r

时间,12-小时(hh:mm:ss AM 或 PM)

%S

秒(00-59)

%s

秒(00-59)

%T

时间, 24-小时 (hh:mm:ss)

%U

周 (00-53) 星期日是一周的第一天

%u

周 (00-53) 星期一是一周的第一天

%V

周 (01-53) 星期日是一周的第一天,与 %X 使用

%v

周 (01-53) 星期一是一周的第一天,与 %x 使用

%W

星期名

%w

周的天 (0=星期日, 6=星期六)

%X

年,其中的星期日是周的第一天,4 位,与 %V 使用

%x

年,其中的星期一是周的第一天,4 位,与 %v 使用

%Y

年,4 位

%y

年,2 位

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')    ----Dec 29 2008 11:45 PM
DATE_FORMAT(NOW(),'%m-%d-%Y')    ----12-29-2008
DATE_FORMAT(NOW(),'%d %b %y')    ----29 Dec 08
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')    ----29 Dec 2008 16:25:46.635

加密解密函数

ENCODE加密

加密解密字符串。该函数有两个参数:被加密或解密的字符串和作为加密或解密基础的密钥。Encode结果是一个二进制字符串,以BLOB类型存储,ENCODE加密是可逆的。

insert into b(id,name)values(10,ENCODE('super', 'abcdefg'));

DECODE解密

select decode(name,'abcdefg') from b where id=10;

MD5加密

计算字符串的MD5校验

select MD5('super');

类型转换函数

CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。

语法:
CAST(xxx AS 类型)
CONVERT(xxx,类型)

二进制 : BINARY    
字符型,可带参数 : CHAR()     
日期 : DATE     
时间: TIME     
日期时间型 : DATETIME     
浮点数 : DECIMAL      
整数 : SIGNED     
无符号整数 : UNSIGNED 

#将123转换成时间
select CAST(123 AS time);

系统信息函数

使用格式:select 函数();

VERSION服务版本号

返回数据库版本号

VERSION()

CONNECTION_ID客户端标识ID

当前连接的客户端ID

CONNECTION_ID()

DATABASE、SCHEMA 当前数据库

返回当前数据库名

DATABASE()
SCHEMA()

USER、*_USER 当前用户

USER()、SYSTEM_USER()、SESSION_USER(),CURRENT_USER()、CURRENT_USER:返回当前用户名

select user();

LAST_INSERT_ID 最近的自增ID

返回最近生成的AUTO_INCREMENT值.

LAST_INSERT_ID()

更多详见:https://www.runoob.com/mysql/mysql-functions.html