四、常用函数
4.1常见函数
select upper(指定字符串)
select upper(指定字符串)
-
left(str,len) 返回左边的字符
-
select Lower(‘ABC’);
select Lower('ABC');
SELECT SUBSTRING(STR,POS);
POS为开始索引,STR为字符串
SELECT SUBSTRING('你好啊2222',2);
SELECT LTRIM(’ 你们好 2 ') AS ac;'去除左边的空格
SELECT LTRIM(' 你们好 2 ') AS ac;'
SELECT LENGTH(‘你们好!’); 返回字符串的长度
SELECT LENGTH('你们好!');
RIGHT(str,len)
SELECT RIGHT('123465',4);
SELECT LOCATE(s_str,p_str); 返回一个串的子串
SELECT LOCATE('你好','你好!');
SOUNDEX() 返回发音相同的串
- 常用函数
SELECT LEFT('0521561',2)
LEFT(str,len)
-- 返回从左边数起的len长度字符串
SELECT RIGHT('123465',2);
RIGHT(str,len)
-- 返回从右边边数起的len长度字符串
SELECT LOCATE('0','123456')
LOCATE(`substr`,str)
-- 返回substr 在str中的位置
-- 找出串的一个字串
-- 若不存在则返回0
SELECT LOWER('ABC')
LOWER(str)
-- 转为小写
SELECT UPPER('abc')
UPPER(str);
-- 转为大写
SELECT LTRIM(' 123')
-- 去掉左边的空格
SELECT RTRIM('123dddd ') AS b
-- 去掉右边的空格
-- 空格必须为英文空格,也就是半角空格
SELECT SOUNDEX('mike')
-- 匹配发音类似的串
SELECT SUBSTRING('12345678',5,1);
SUBSTRING(str,pos)
SUBSTR(str,pos,len)
SELECT stbstr(,)
-- 返回从pos开始处的字串,len为返回长度,不填则默认返回后面的所有长度
SELECT REPLACE('丽日','日','月')
REPLACE(str,from_str,to_Str)
-- 将str 中的 from 替换成to
SELECT REVERSE('张家口');
-- 逆序
SELECT INSERT(str,pos,len,newstr)
SELECT INSERT('123456',4,2,'你')
-- 用newstr替换 pos位置开始的len长度的字符串
SELECT ABS(-8) -- 绝对值
SELECT CEILING(9.4) -- 向上取整
SELECT FLOOR(9.4) -- 向下取整
SELECT RAND() -- 返回0`1 之间的一个随机数
SELECT SIGN(10) -- 判断一个数的符号 负数 -1 ,正数1
4.2时间处理函数(重要)
-- 时间和日期函数(记住)
SELECT CURRENT_DATE() -- 获取当前日期
SELECT CURDATE()
select current_time() --获取当前时间
select date() -- 获取日期时间的日期部分
date_format() -- 返回一个格式化的日期或者十间川
SELECT NOW() -- 当前时间localtime
SELECT LOCALTIME() -- 本地时间
SELECT SYSDATE() -- 获取系统时间 yyyy-MM-DD hh:mm:ss
select second() --获得一个时间的秒部分
SELECT MINUTE(NOW()) -- 获得一个时间分钟部分
SELECT HOUR(NOW()) -- 获得一个时间小时部分
select year() -- 获得指定日期的年份
select time() --获得一个日期时间的时间部分
SELECT DATEDIFF('2017-02-05','2018-05-06')
SELECT DATEDIFF(NOW(),'2018-05-05')
DATEDIFF(expr1,expr2) expr1-expr2
DATE_ADD(DATE,INTERVAL expr unit)
-- expr:指定的是一个间隔值,在起始时间中增加或者减少,注意:expr是一个字符串.对于负值间隔,可以以"-"开头
-- unit:表示的是一个单位,比如,加上的是1天还是一个小时.
SELECT DATE_ADD(NOW(),INTERVAL 5 HOUR)
SELECT DATE_ADD(NOW(),INTERVAL 5 MINUTE)
SELECT DATE_ADD(NOW(),INTERVAL 5 YEAR)
-- date:起始日期或者起始时间
4.3数值处理函数
-- 数学运算
SELECT ABS(-8) -- 绝对值
SELECT CEILING(9.4) -- 向上取整
SELECT FLOOR(9.4) -- 向下取整
SELECT RAND() -- 返回0`1 之间的一个随机数
SELECT SIGN(10) -- 判断一个数的符号 负数 -1 ,正数1
select tan() -- 返回一个角度的正切值
select sqrt() -- 返回一个值的平方根
select mod() -- 返回除操作的余数
select pi() --返回圆周率
五、聚集函数
5.1AVG()函数
计算平均值
select avg(score) from sc;
5.2count()函数
三种使用方式
1.使用count(*)对表中的行的数目进行计数,不管表列中包含的是空值(null)还是非空值
2.count(column)对特定列中的具有值的行进行计数,忽略null值
3.count(1),同样不会忽略null值
三者之间的区别:
执行效果上: count(星)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。
执行效率上: 列名为主键,count(列名)会比count(1)快 列名不为主键,count(1)会比count(列名)快
如果表多个列并且没有主键,则 count(1) 的执行效率优于 count() 如果有主键,则 select
count(主键)的执行效率是最优的 如果表只有一个字段,则 select count()最优。
转载自:https://www.cnblogs.com/zxf330301/p/10217350.html
5.3MAX()函数
-
返回指定列的最大值,MAX()要求指定列名
-
对日期使用,返回最大的日期
-
max会忽略null值
-
可以对非数值类型使用
5.4 MIN()函数
- MIN函数同样忽略为null值的行,同样需要指定列名
- 可以对非数值类型使用,sname为varcahr类型
5.5 SUM()函数
- 用来返回指定字段的和
- 可以利用算数操作符对多个列进行运算
5.6聚集不同值
- 对所有的行进行计算,指定all 或者不给参数(默认为all)
- 只包含不同的值,指定distinct参数
六、数据分组
6.1group by 语句
-
with rollup 可以得到每个分组以及每个分组总结别的值。
-
没用WITH ROLLUP
-
用了之后 可看见后面加了统计值
6.2过滤分组 HAVING
-
HAVING和where的区别:where在分组前过滤,having在分组后过滤
-
过滤num不等于2的记录