Mysql--常用函数
一、MySQL 数字函数
count()函数
1、SELECT COUNT(字段名) FROM 表名;
解释:统计该字段名不为null的数据总数。
2、SELECT COUNT(*) FROM 表名;
解释:统计该数据表中数据总数。
3、SELECT COUNT(1) FROM 表名;
解释:统计该数据表中数据总数。
COUNT(*)和COUNT(1)的区别:
这俩种方式都可以用来统计表中总数据量,但是他们的实现方式略有不同。
- COUNT(*)是统计表中的行(该行数据同时都不为null)的数据总量,也就是说如果有一行所有数据都为null,那么就不会被统计。
- COUNT(1)是通过在该表的表结构中添加一列,该列的数据都为1,最终是通过统计该列中有多少个数据为1的数量,即为数据总数。
avg()函数
找到 OrderPrice 值高于 OrderPrice 平均值的客户。
SELECT Customer FROM Orders WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
first()函数、last()函数
查找 "OrderPrice" 列的最后一个值。
SELECT LAST(OrderPrice) AS LastOrderPrice FROM Orders
max() 、min()函数
SELECT MAX(column_name) FROM table_name
注释:MIN 和 MAX 也可用于文本列,以获得按字母顺序排列的最高或最低值。
sum()函数
SELECT SUM(column_name) FROM table_name
len() 函数
LEN 函数返回文本字段中值的长度。
SELECT LEN(column_name) FROM table_name
round() 、floor()、ceil()函数
ROUND 函数用于把数值字段舍入为指定的小数位数。
SELECT ROUND(column_name,decimals) FROM table_name
二、MySQL 字符串函数
concat(s1,s2...)将多个字段值的字符串合并为一个字符串
concat_ws(x, s1,s2....) 将多个字段值的字符串合并为一个字符串,第一个参数为分隔符
SELECT CONCAT_WS("-", "SQL", "Tutorial", "is", "fun!")AS ConcatenatedString;
find_ in_set(s1, s2):返回字符串 c 在指定字符串中的位置
SELECT FIND_IN_SET("c", "a,b,c,d,e");
locate(s1, s):从字符串 s 中获取 s1 的开始位置
SELECT LOCATE('st','myteststring'); -- 5
positon(s1 IN s): 从字符串 s 中获取 s1 的开始位置
SELECT POSITION('b' in 'abc') -- 2
left(s,n) 返回字符串 s 的前 n 个字符
right(s,n)返回字符串 s 的后 n 个字符
SELECT LEFT('runoob',2) -- ru
lpad(s1,len,s2) 在字符串 s1 的开始处插入字符串 s2,使字符串长度达到 len
rpad(s1,len,s2) 在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len
SELECT LPAD('abc',5,'xx') -- xxabc
mid(s,n,len) 从字符串 s 的 n 位置截取长度为 len 的子字符串,同substring(s,n,len)
SELECT MID("RUNOOB", 2, 3) AS ExtractString; -- UNO
insert(s1, x, len, s2)函数
字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
SELECT INSERT("google.com", 1, 6, "runoob");
replace(s,s1,s2) 将字符串 s2 替代字符串 s 中的字符串 s1
SELECT REPLACE('abc','a','x') --xbc
substr(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串
substring(s, start, length)从字符串 s 的 start 位置截取长度为 length 的子字符串
SELECT SUBSTR("RUNOOB", 2, 3) AS ExtractString; -- UNO
substring_index(s, delimiter, number) 返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。
如果 number 是正数,返回第 number 个字符左边的字符串。
如果 number 是负数,返回第number个字符右边的字符串。
SELECT SUBSTRING_INDEX('a*b','*',1) -- a
SELECT SUBSTRING_INDEX('a*b','*',-1) -- b
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1) -- c
strcmp(s1,s2) 比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1
SELECT STRCMP("runoob", "runoob"); -- 0
format(x, n) 用于对字段的显示进行格式化。
SELECT FORMAT(column_name,format) FROM table_name
三、MySQL 日期函数
adddate(d,n) 计算起始日期 d 加上 n 天的日期
SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);
->2017-06-25
addtime(t,n)n 是一个时间表达式,时间 t 加上时间表达式 n
SELECT ADDTIME('2011-11-11 11:11:11', 5);
->2011-11-11 11:11:16 (秒)
current_date()返回当前日期
current_time()返回当前时间
current_timestamp()返回当前日期和时间
localtime()返回当前日期和时间
localtimestamp()返回当前日期和时间
now()返回当前日期和时间
SELECT CURRENT_DATE();
-> 2018-09-19
SELECT CURRENT_TIME();
-> 19:59:02
SELECT CURRENT_TIMESTAMP()
-> 2018-09-19 20:57:43
SELECT LOCALTIME()
-> 2018-09-19 20:57:43
SELECT LOCALTIMESTAMP()
-> 2018-09-19 20:57:43
date()从日期或日期时间表达式中提取日期值
datediff(d1,d2)计算日期 d1->d2 之间相隔的天数
timediff(time1, time2)计算时间差值
date_add(d,INTERVAL expr type)计算起始日期 d 加上一个时间段后的日期
date_sub(date,INTERVAL expr type)函数从日期减去指定的时间间隔。
subdate(d,n) 日期 d 减去 n 天后的日期
subtime(t,n) 时间 t 减去 n 秒的时间
SELECT DATE("2017-06-15");
-> 2017-06-15
SELECT DATEDIFF('2001-01-01','2001-02-02')
-> -32
SELECT TIMEDIFF("13:10:11", "13:10:10");
-> 00:00:01
SELECT ADDDATE('2011-11-11 11:11:11',1)
-> 2011-11-12 11:11:11 (默认是天)
SELECT ADDDATE('2011-11-11 11:11:11', INTERVAL 5 MINUTE)
-> 2011-11-11 11:16:11 (TYPE的取值与上面那个列出来的函数类似)
SELECT SUBDATE('2011-11-11 11:11:11', 1)
->2011-11-10 11:11:11 (默认是天)
SELECT SUBTIME('2011-11-11 11:11:11', 5)
->2011-11-11 11:11:06 (秒)
dayname(d)返回日期 d 是星期几
dayofmonth(d)计算日期 d 是本月的第几天
dayofweek(d)日期 d 今天是星期几,1 星期日,2 星期一,以此类推
dayofyear(d)计算日期 d 是本年的第几天
extract(type from d)从日期 d 中获取指定的值,type 指定返回的类型。
SELECT DAYNAME('2011-11-11 11:11:11')
->Friday
SELECT DAYOFMONTH('2011-11-11 11:11:11')
->11
SELECT DAYOFWEEK('2011-11-11 11:11:11')
->6
SELECT DAYOFYEAR('2011-11-11 11:11:11')
->315
SELECT EXTRACT(MINUTE FROM '2011-11-11 11:11:11')
-> 11
year(d)返回年份
month(d)返回日期d中的月份值
minute(t)返回 t 中的分钟值
second(t)返回 t 中的秒钟值
SELECT MONTH('2011-11-11 11:11:11')
->11
SELECT MINUTE('1:2:3')
-> 2
SELECT SECOND('1:2:3')
-> 3
makedate(year, day-of-year)基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期
maketime(hour, minute, second)组合时间,参数分别为小时、分钟、秒
SELECT MAKEDATE(2017, 3);
-> 2017-01-03
SELECT MAKETIME(11, 35, 4);
-> 11:35:04
sec_to_time(s)将s 转换为时分秒的格式
time_to_sec(t)将时间 t 转换为秒
str_to_time(string, format_mask)将字符串转变为日期
SELECT SEC_TO_TIME(4320)
-> 01:12:00
SELECT TIME_TO_SEC('1:12:00')
-> 4320
SELECT STR_TO_DATE("August 10 2017", "%M %d %Y");
-> 2017-08-10
四、MySQL 高级函数
cast(x as type)转换数据类型
SELECT CAST("2017-08-29" AS DATE);
-> 2017-08-29
conv(x, f1, f2)返回 f1 进制数变成 f2 进制数
SELECT CONV(15, 10, 2);
-> 1111
if(expr, v1, v2)如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。
SELECT IF(1 > 0,'正确','错误')
->正确
case expression case 表示函数开始,end表示函数结束。
SELECT CASE WHEN 1 > 0 THEN '1 > 0' WHEN 2 > 0 THEN '2 > 0' ELSE '3 > 0' END ->1 > 0