1.字符函数
#字节长度
SELECT LENGTH("张三丰abcd");
#字符连接
SELECT CONCAT("abc","def");
#大小写
SELECT UPPER("sdsds"); #大写
SELECT LOWER("SDSADAD"); #小写
#截取字符串 substr或substring
SELECT SUBSTR("abcdefg",2,3); #字符串,开始字符(从1开始),截取长度
SELECT SUBSTR("abcdefg",2); #字符串,开始字符截取到末尾
#返回子串索引值 insrt(str,substr) 不存在返回0
SELECT INSTR("abcd","c");
#去除字符串开始和结束的特定字符
SELECT TRIM(" sd ");
SELECT TRIM('a' FROM "aaabbbbbbaaaa"); #去除字符串开始和结束的特定字符
#字符填充 lpad 左填充,rpad 右填充
SELECT LPAD("abc",10,'d'); #原始字符串,填充后字符长度,填充字符串
SELECT RPAD("abc",10,"dfg");
#替换 replace
SELECT REPLACE("abcdeaadd",'a',"z"); #原始字符串,需要替换的字符串,替换字符串
2.数学函数
#四舍五入 round
SELECT ROUND(1.5); #2
SELECT ROUND(-1.5); #-2
SELECT ROUND(12.2344,2); #数值,保留位数
#向上取整 ceil
SELECT CEIL(1.1); #2
SELECT CEIL(1.0); #1
SELECT CEIL(-1.2); #-1
#向下取整 floor
SELECT FLOOR(1.2); #1
SELECT FLOOR(-1.2); #-2
#截取几位 truncate
SELECT TRUNCATE(1.256554,2); #1.25
3.日期函数
#获取现在时间 now
SELECT NOW(); #2020-11-08 13:38:12
SELECT CURRENT_DATE(); #2020-11-08
SELECT CURRENT_TIME(); #13:38:49
#获取特定 年 月 日
SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());
#字符串转日期类 str_to_date
SELECT STR_TO_DATE("1999-02-02 15:15:15","%Y-%m-%d %H:%i:%s");
#日期转字符串 date_format
SELECT DATE_FORMAT(NOW(),"%Y年%m月%d日 %H时%i分%s秒");
-- 今天日期+时间
select now() ; --返回2018-04-25 17:33:21
-- 今天日期
select curdate(); --返回2018-04-25
-- 今天日期格式化
select date_format(curdate(),'%Y-%m-%d'); --返回2018-04-25
-- 昨天日期
select date_add(curdate(), interval -1 day); --返回2018-04-24
-- 昨天日期格式化
select date_add(date_format(curdate(),'%Y-%m-%d'), interval -1 day); 2018-04-24
SELECT CURRENT_DATE-1 as date; -- 20201221 转换为了int类型数据
4.其他函数
SELECT VERSION();
SELECT DATABASE();
SELECT USER();
5.流程控制函数
#流程控制函数
SELECT IF(10>2,"大","小"); #表达式,为真显示内容,为假显示内容
#case
SELECT CASE 10-5
WHEN 5 THEN
'5'
WHEN 4 THEN
'4'
ELSE
'6'
END;
#case实现多分支判断
SELECT CASE
WHEN 表达式1 THEN
表达式1
WHEN 表达式2 THEN
表达式2
ELSE
statement_list
END CASE;
排序函数
区别RANK,DENSE_RANK和ROW_NUMBER
- RANK并列跳跃排名,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,跳跃到总共的排名。
- DENSE_RANK并列连续排序,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,依然按照连续数字排名。
- ROW_NUMBER连续排名,即使相同的值,依旧按照连续数字进行排名。
SELECT score,
ROW_NUMBER() OVER (ORDER BY score DESC) ranking
FROM score;
SELECT course_id, score,
RANK() OVER(ORDER BY score DESC)
FROM score;
SELECT course_id, score,
DENSE_RANK() OVER(ORDER BY score DESC) FROM score;