合计统计函数
count(列名)–总数
-
返回行的总数
-
count(*)返回满足条件的记录的行数
-
count(列)统计满足条件的某列有多少个,但是会排除null的情况
select count(*) from emp;
sum(列名)–总和
- 返回满足where条件的行的总和,一般用于数值列
select sum(math),sum(chinese) from student;
avg(列名)–平均值
- 返回满足where条件的一列的平均值
select avg(math+chinese+english) from student;
max/min(列名)–最大/最小值
- 返回满足where条件一列的最大**/**最小值
select max(math),min(chinese) from student;
字符串函数
CHARSET(str) 返回字串字符集
select charset(ename) from emp; -- utf8
CONCAT (string2 [,… ]) 连接字串, 将多个列拼接成一列
select concat(ename,'工作是:',job) from emp;
INSTR (string ,substring ) 返回 substring 在 string 中出现的位置,没有返回 0
select instr('hello word','ll') from dual; -- 3
UCASE (string2 ) 转换成大写
select ucase('abc') from dual;
LCASE (string2 ) 转换成小写
select lcase('ABC') from dual;
LEFT (string2 ,length )从 string2 中的左边起取 length 个字符
select left('abcd',2) from dual; -- ab
RIGHT (string2 ,length ) 从 string2 中的右边起取 length 个字符
select right('abcd',2) from dual; -- cd
LENGTH (string ) string 长度[按照字节]
select length('abcd') from dual; -- 4
select length('你好') from dual; -- 6,当前是utf8编码,一个汉字占三个字节
REPLACE (str ,search_str ,replace_str )
select replace('abcd','bc','BC') from dual; -- aBCd
select replace('abcd','xy','XY') from dual; -- abcd,找不到该字符串,无法替换
STRCMP (string1 ,string2 ) 逐字符比较两字串大小
select strcmp('ab','ab') from dual; -- 0,如果两个字符串相同返回0,如果s1<s2,返回-1,如果s1>s2,返回1
SUBSTRING (str , position [,length ]),截取子串,position从1开始计算,length不写,则取后面全部
select substring('abcd',1,2) from dual; -- ab
select substring('abcd',1) from dual; -- abcd
LTRIM (string2 ) RTRIM (string2 ) TRIM(string) – 去除前端空格或后端空格
select ltrim(' abcd') from dual; -- abcd
select rtrim(' abcd ') from dual;
select trim(' abcd ') from dual; -- 去除两端空格
数学函数
ABS(num) 绝对值
select abs(-5) from dual; -- 5
BIN (decimal_number )十进制转二进制
select bin(8.5) from dual; -- 1000
CEILING (number2 ) 向上取整, 得到比 num2 大的最小整数
select ceiling(2.1) from dual; -- 3
CONV(number2,from_base,to_base) 进制转换
-- 下面的含义是 8 是十进制的 8, 转成 2 进制输出
select conv(8,10,2) from dual; -- 1000
-- 01000,二进制,转成10进制
select conv(01000,2,10) from dual; -- 8
FLOOR (number2 ) 向下取整,得到比 num2 小的最大整数
select floor(2.9) from dual; -- 2
FORMAT (number,decimal_places ) 保留小数位数(四舍五入)
select format(3.14159,4) from dual; -- 3.1416
HEX (DecimalNumber ) 转十六进制
select hex(15) from dual; -- F
select hex(16) from dual; -- 10
LEAST (number , number2 [,…]) 求最小值
select least(3,4,6,2,19) from dual; -- 2
MOD (numerator ,denominator ) 求余
select mod(10,3) from dual; -- 1
RAND([seed]) RAND([seed]) 返回随机数 其范围为 0 ≤ v ≤ 1.0
-- rand()每次都返回不同的随机数
-- rand(seed)如果随机种子不变,该随机数也不变
select rand(10) from dual;
时间日期函数
current_date(),当前日期
select current_date() from dual; -- 2021-09-02
current_time(),当前时间
select current_time() from dual; -- 22:35:22
current_timestamp(),当前时间戳
select current_timestamp() from dual; -- 2021-09-02 22:35:22
date(datetime),获取datetime中的日期
select date('2021-09-02 22:35:22') from dual; -- 2021-09-02
date_add(date,interval) ,在date中加上日期或时间
select date_add('2021-09-02 22:35:22',interval 10 minute) from dual; -- 2021-09-02 22:45:22
date_sub(date,interval),在date中减去日期或时间
select date_sub('2021-09-02 22:45:22',interval 20 minute) from dual; -- 2021-09-02 22:25:22
datediff 相差的日期
select datediff(now(),'1994-05-09') from dual;
select datediff( date_add('1986-11-11',interval 80 year),now()) from dual;
timediff 相差的时间
select timediff('20:00:00','18:00:00') from dual; -- 02:00:00
select year(now()),month(now()),day(now()) from dual;
FROM_UNIXTIME() : 可以把一个 unix_timestamp 秒数[时间戳],转成指定格式的日期
- %Y-%m-%d 格式是规定好的,表示年月日
- 意义:在开发中,可以存放一个整数,然后表示时间,通过 FROM_UNIXTIME 转换
select from_unixtime(1618483484,'%Y-%m-%d') from dual; -- 2021-04-15
系统和加密函数
USER() 查询用户
select user() from dual; -- root@localhost
DATABASE()查询当前使用数据库名称
select database(); -- db01
MD5(str) 为字符串算出一个 MD5 32 的字符串,常用(用户密码)加密
select md5('你好') from dual; -- 7eca689f0d3389d9dea66ae112e5cfd7
PASSWORD(str) – 加密函数, MySQL 数据库的用户密码就是 PASSWORD 函数加密
select password('你好') from dual; -- *CF5BE1F39115E469E455BEC512DE978231206A6C
流程控制函数
IF(expr1,expr2,expr3)
select if(true,'a','b') from dual; -- a
IFNULL(expr1,expr2)
select ifnull('abc','def') from dual; -- abc
select ifnull(null,'abc') from dual; -- abc
SELECT CASE WHEN expr1 THEN expr2 WHEN expr3 THEN expr4 ELSE expr5 END; [类似多重分支.]
- 如果 expr1 为 TRUE,则返回 expr2,如果 expr2 为 t, 返回 expr4, 否则返回 expr5
select case when false then '张三' when false then '李四' else '王五' end; -- 王五