聚合函数
聚合函数是纵向计算的函数,一般在SELECT语句中使用
函数 | 描述 |
---|---|
COUNT() | 统计指定列不为NULL的记录行数 |
MAX() | 计算指定列的最大值,字符串类型列使用字符串排序运算 |
MIN() | 计算指定列的最小值,字符串类型列使用字符串排序运算 |
SUM() | 计算指定列的数值和,如果列类型不是数值类型,计算结果为0 |
AVG() | 计算指定列的平均值,如果列类型不是数值类型,计算结果为0 |
NULL值不参与所有的聚合函数计算,写语:
SELECT 聚合函数(字段列表) FROM 表名 ;
数值型函数
MySQL的数值型函数与Java中的Math类里的方法类似。
函数名称 | 作 用 |
---|---|
ABS | 求绝对值 |
SQRT | 求二次方根 |
MOD | 求余数 |
CEIL、CEILING | 返回不小于参数的最小整数,即向上取整 |
FLOOR | 向下取整,返回值转化为一个bigint数据 |
RAND | 生成一个0~1之间的随机数,传入整数参数,用来产生重复序列 |
ROUND | 对所传参数进行四舍五入 |
SIGN | 返回参数的符号 |
POW、POWER | 返回所传参数的次方的结果值 |
SIN | 求正弦值 |
ASIN | 求反正弦值,与函数 SIN 互为反函数 |
COS | 求余弦值 |
ACOS | 求反余弦值,与函数 COS 互为反函数 |
TAN | 求正切值 |
ATAN | 求反正切值,与函数 TAN 互为反函数 |
COT | 求余切值 |
# 值可以是一个数值类型的列# abs(值)# MOD(被除数,除数)# ROUND(值)/ROUND(值,小数位)
# 小数位标识精确到几位小数,不设置则默认为0# sign(值) 返回参数符号: 正数: 1 负数:-1 零:0# POW(底数,指数)
# 底数可以是整数或浮点数
# 指数可以是整数、浮点数、正数、负数或零
字符串函数
函数名称 | 作 用 |
---|---|
LENGTH | 计算字符串长度函数,返回字符串的字节长度 |
CONCAT | 合并字符串函数,返回结果为连接参数产生的字符串,参数可以是一个或多个 |
INSERT | 替换字符串函数 |
LOWER | 将字符串中的字母转换为小写 |
UPPER | 将字符串中的字母转换为大写 |
LEFT | 从左侧字截取符串,返回字符串左边的若干个字符 |
RIGHT | 从右侧字截取符串,返回字符串右边的若干个字符 |
TRIM | 删除字符串左右两侧的空格 |
REPLACE | 字符串替换函数,返回替换后的新字符串 |
SUBSTRING | 截取字符串,返回从指定位置开始的指定长度的字符换 |
REVERSE | 字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串 |
# 字符串拼接 concat(值1, 值2,...)# 替换指定个数的字符:
#INSERT(值,开始位置,个数,替换的值)
SELECT INSERT('helloword',2,2,'ha');
SELECT INSERT(ename,1,1,'') FROM emp;# left(值,长度) 从左侧字截取符串,返回字符串左边的若干个字符
SELECT LEFT('hello world',2);# right(值,长度) 从右侧字截取符串,返回字符串左边的若干个字符
SELECT RIGHT('hello world',2);# substring(列名,开始位置,[长度])
# 截取字符串,返回从指定位置开始的指定长度的字符换
SELECT SUBSTRING('hello world',2,2);
SELECT SUBSTRING('hello world',2);# replace(值,被替换的内容,新的内容)
SELECT REPLACE('hello world ll','ll','dd');
日期和时间函数
函数名称 | 作 用 |
---|---|
CURDATE、CURRENT_DATE | 返回当前系统的日期值 |
CURTIME、CURRENT_TIME | 返回当前系统的时间值 |
NOW、SYSDATE | 返回当前系统的日期和时间值 |
MONTH | 获取指定日期中的月份 |
MONTHNAME | 获取指定日期中的月份英文名称 |
DAYNAME | 获取指定曰期对应的星期几的英文名称 |
DAYOFWEEK | 返回指定日期在一周里是第几天 |
WEEK | 获取指定日期是一年中的第几周 |
DAYOFYEAR | 获取指定曰期是一年中的第几天 |
DAYOFMONTH | 获取指定日期是一个月中是第几天 |
YEAR | 获取当前年份 |
ADDTIME | 在原始时间上添加指定的时间 |
SUBTIME | 在原始时间上减去指定的时间 |
DATEDIFF | 获取两个日期之间间隔,返回参数 1 减去参数 2 的值 |
DATE_FORMAT | 格式化指定的日期,根据参数返回指定格式的值 |
WEEKDAY | 获取指定日期在一周内的对应的工作日索引 |
LAST_DAY | 获取指定日期这个月的最后一天的日期 |
date_format的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 位
#得到年 year(值)
SELECT YEAR(NOW());
SELECT YEAR(hiredate) FROM emp;
SELECT YEAR('2012-12-12');#得到月份 month(值)
SELECT MONTH(NOW());#日期相加 adddate(值, 天数)
SELECT ADDDATE(NOW(),10)#日期相减 subdate()
SELECT SUBDATE(NOW(),10);#计算两个日期的相隔多少天 datediff(日期1,日期2) 日期1-日期2
SELECT DATEDIFF('2012-12-12','2011-11-1');#DATE_FORMAT(日期,格式字符串) 格式化字符串
SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日 %H:%i:%s');#LAST_DAY(日期/日期列名) 查找指定日期这个月的最后一天的日期
SELECT LAST_DAY(NOW());
流程控制函数
函数名称 | 作用 |
---|---|
IF | 判断,流程控制 |
IFNULL | 判断是否为空 |
CASE | 搜索语句 |
#if函数:if else的效果 if(条件,结果1,结果2)
SELECT IF(comm IS NULL,'没有奖金','有奖金') FROM emp;# ifnull(被检测值,默认值)函数检测是否为null,如果为null,则返回指定的值,否则返回原本的值
#统计每个员工的月收入
SELECT sal + IFNULL(comm,0) FROM emp;#case when 条件 then 结果 1 else 结果 2 end; 可以有多个 when
#查询每个员工的姓名,薪水,以及工资情况
# 情况: sal>=2500 高工资 2500>sal>=1500 中等工资 sal<1500 低工资
SELECT ename,sal,CASE WHEN sal >=2500 THEN '高工资'WHEN sal >=1500 THEN '中等工资'
ELSE '低工资' END 薪水情况 FROM emp;