mysql执行顺序
from -> where -> group by (having)-> select -> order by -> limit
函数
函数分类:数字函数、字符函数、日期函数、条件函数
大部分系统函数
函数名 | 说明 |
---|---|
CONCAT(str0,str1) | 将两个字段的值拼接在一起 |
CONCAT_WS(“拼接符”,str0,str1) | 将两个字段的值使用指定拼接符拼接在一起 |
GROUP_CONCAT(expr) | 将指定分组的字段内容拼接在一起 |
UPPER(str) | 将字符串包含的英文字符小写转化成大写 |
LOWER(str) | 将字符串包含的英文字符大写转化成小写 |
INITCAP(str) | 将字符串的首字母变成大写 |
LENGTH(str) | 获取字符串的长度 |
SUBSTR(str FROM pos FOR len) | 截取字符串,其中 pos 表示其实位置,len 表示结束位置 |
TRIM(str) | 去除字符串两边空格 |
INSTR(str,substr) | 查找指定字符在字符串的中的位置,其中 substr 表示需要查找的字符,例如 ‘Tom’ 中 ‘T’ 的位置为 1,‘m’ 的位置为 3 |
LPAD(str,len,padstr) | 左填充,其中 len,表示字符串总长度,padstr 表示填充的字符 |
RPAD(str,len,padstr) | 右填充,其中 len,表示字符串总长度,padstr 表示填充的字符 |
LEFT(str,len) | 取一个字符串的前多少位 |
RIGHT(str,len) | 取一个字串的后多少位 |
CEIL(X) | 向上取整 |
FLOOR(X) | 向下取整 |
MOD(N,M) | 取余,例如 MOD(age,5),将字段 age 除以 5,除不尽的取余数 |
POWER(X,Y) | 幂运算,例如 MOD(age,2),获取字段 age 值的 2 次方的值 |
NOW() | 获取当前日期和时间 |
CURDATE() | 获取当前日期,不包含时间 |
CURTIME() | 获取当前时间,不包含日期 |
YEAR(now()) | 获取当前的年份 |
HOUR(NOW()) | 获取当前时间的小时数 |
MINUTE(now()) | 获取当前时间的分钟数 |
SECOND(NOW()) | 获取当前时间的秒数 |
MONTHNAME(now()) | 获取当前日期的英文月份 |
MONTH(NOW()) | 获取当前日期的数字月份 |
DATE_ADD(date,INTERVAL expr unit) | 查询日期的变化,例如 DATE_ADD(‘2020-03-03’,INTERVAL 10 day) 表示 2020-03-03 十天之后的日期 |
DATEDIFF(expr1,expr2) | 日期差,例如 DATEDIFF(‘2019-12-29’,‘2019-12-01’) 表示 2019-12-29 距离 2019-12-01 的天数 |
DATE_FORMAT(date,format) | 将指定日期转化为自定义格式,例如 DATE_FORMAT(‘2019-12-29’,’%m/%d/%y’) ,其中 %m 表示前面对应的月份,%d 表示前面对应的日期的天数,%y 表示前面对应的年份 |
STR_TO_DATE(str,format) | 将指定日期转化为自定义格式,例如 DATE_FORMAT(‘12-29-2019’,’%m/%d/%y’) |
DATE_FORMAT(date,format) | 将指定日期转化为自定义格式,例如 DATE_FORMAT(‘2019/12/29’,’%m/%d/%y’) |
MD5(str) | 对字符串进行 MD5 转换 |
UNIX_TIMESTAMP() | 将指定日期转化为时间戳 |
COUNT() | 获取查询结果集条数 |
AVG(expr) | 获取指定列平均值 |
SUM(expr) | 获取指定字段值的总和 |
MIN(expr) | 获取指定字段值的最小值 |
MAX(expr) | 获取指定字段值的最大值 |
数字函数
floor()
强制舍位,向下取整
cell()
强制进位,向上取整
ROUND()
ROUND(column_name,decimals),把数值字段舍入为指定的小数位数。
column_name:必需。要舍入的字段。
decimals:必需。规定要返回的小数位数。如果0,结果将没有小数点或小数部分。
SELECT ROUND(column_name,decimals) FROM table_name;
字符函数
MID()
mid(column_name,start[,length]),从文本字段中提取字符
column_name:必需。要提取字符的字段。
start:必需。规定开始位置(起始值是 1)。
length:可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
SELECT MID(column_name,start[,length]) FROM table_name;
SELECT substr(name,1,4) AS ShortTitle FROM Websites;
LENGTH()
length(column_name),返回文本字段中值的长度。
SELECT LENGTH(column_name) FROM table_name;
日期函数
- MySQL数据库里,两个日期不能直接加减,日期也不能与数字加减
DATE_FORMAT()
date_foramat(),将指定日期转化为自定义格式
例如:DATE_FORMAT(‘2019-12-29’,’%m/%d/%y’) ,其中 %m 表示前面对应的月份,%d 表示前面对应的日期的天数,%y 表示前面对应的年份
DATE_ADD()
date_add()函数,可以实现日期的偏移计算,而且时间单位灵活
date_add(日期,interval 偏移量 时间单位)
select date_add(NOW(),INTERVAL 15 DAY);
SELECT DATE_ADD(NOW(),INTERVAL -300 MINUTE);
UNIX_TIMESTAMP()
UNIX_TIMESTAMP()将日期转化为UNIX时间戳
SELECT UNIX_TIMESTAMP();
Tips:
UNIX_TIMESTAMP() 函数默认获取当前时间戳,
获取指定日期的时间戳: UNIX_TIMESTAMP(‘2012-12-21’) 的取值为 1356019200。
条件函数
IF()
IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。
SELECT IF(TRUE,'A','B'); -- 输出结果:A
SELECT IF(FALSE,'A','B'); -- 输出结果:B
IFNULL()
IFNULL(expr1,expr2),如果expr1的值为null,则返回expr2的值,如果expr1的值不为null,则返回expr1的值。
SELECT IFNULL(NULL,'B'); -- 输出结果:B
SELECT IFNULL('HELLO','B'); -- 输出结果:HELLO
NULLIF()
NULLIF(expr1,expr2),如果expr1=expr2成立,那么返回值为null,否则返回值为expr1的值。
SELECT NULLIF('A','A'); -- 输出结果:null
SELECT NULLIF('A','B'); -- 输出结果:A
ISNULL()
ISNULL(expr),如果expr的值为null,则返回1,如果expr1的值不为null,则返回0。
SELECT ISNULL(NULL); -- 输出结果:1
SELECT ISNULL('HELLO'); -- 输出结果:0
CASE
CASE
WHEN 表达式 THEN 值1
WHEN 表达式 THEN 值2
...
ELSE 值N
END
UNION
union / union all语法
- 合并两个或多个 SELECT 语句的结果集
- UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
- UNION 选取不同的值。 UNION ALL 选取重复的值!
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;
EXISTS 运算符
exists 运算符,判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
[not] exists