4.1MySQL-常见函数_单行函数

#进阶4:常见函数

/* 概念:类似于Java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名 。
优点:1)隐藏了实现细节 2)提高了代码的重用性
调用: SELECT 函数名(实参列表)【FROM 表】;
特点:
1)叫什么(函数名)
2)干什么(函数功能)
分类:
1)单行函数
如 CONCAT(str1,str2,…)、LENGTH(str)、IFNULL(expr1,expr2)等
2)分组函数
功能:做统计使用,又称为统计函数、聚合函数、组函数
*/
**

4.1单行函数

**

#一、字符函数

#1.LENGTH(str):获取参数值的字节个数

SELECT LENGTH('John');
SELECT LENGTH('肖战hahaha');
SHOW VARIABLES LIKE '%CHAR%'

#2.CONCAT(str1,str2,…) 拼接字符串

SELECT CONCAT(last_name,'_',first_name) as 姓名
FROM employees;

#3.upperLOWER(str)

SELECT UPPER('john');
SELECT LOWER('JOHN');

#示例:将姓变大写,名变小写,然后拼接

SELECT CONCAT(upper(last_name),'_',LOWER(first_name)) as 姓名
FROM employees;

#4.SUBSTR(str FROM pos FOR len)、SUBSTRING(str FROM pos FOR len)

#注意:索引从1开始

#截取从指定索引处后面所有字符

SELECT SUBSTR('博君一肖是真的',5) as output;

#获取从指定索引处指定字符长度的字符

SELECT SUBSTR('博君一肖是真的',1,4) as output;

#案例:姓名中首字符大写,其他字符小写,然后用_拼接显示出来

扫描二维码关注公众号,回复: 8941043 查看本文章
SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',lower(substr(last_name,2))) as out_put
FROM employees;

#5.INSTR(str,substr):返回子串第一次出现的索引,如果找不到返回0

SELECT INSTR('博君一肖是真的','是真的');

#6.TRIM([remstr FROM] str)

SELECT LENGTH(TRIM('   博君一肖   ')) as out_put;
SELECT TRIM('g' from 'ggggggg博君一肖ggggg是真的gggggg') as out_put;

#7.lpad:用指定的字符实现左填充字符长度

SELECT LPAD('博君一肖',9,'*') as out_put;

#8.rpad:用指定的字符实现右填充字符长度

SELECT rPAD('博君一肖',9,'*') as out_put;

#9.REPLACE 替换

SELECT REPLACE('博君一肖是真的','博君一肖','肖战&王一博') as out_put;

#二、数学函数

#1.ROUND(X):四舍五入

SELECT ROUND(-1.55);
SELECT ROUND(1.568,2);

#2.ceil:向上取整,返回>=该参数的最小整数

SELECT CEIL(1.003);

#3.FLOOR(X):向下取整,返回<=该参数的最大整数

SELECT FLOOR(-9.99);

#4.TRUNCATE:截断

SELECT TRUNCATE(1.9595,2)

#5.MOD(N,M):取余

SELECT MOD(10,3);
SELECT 10%3;

**

三、日期函数

**
#1.NOW:返回当前系统日期和时间

SELECT NOW();

#2.curdate:返回当前系统日期,不包含时间

SELECT CURDATE();

#3.curtime:返回当前系统时间,不包含日期

SELECT CURTIME();

#4.可以获取指定的部分:年、月、日、时、分、秒

SELECT YEAR(NOW()) AS; 
SELECT YEAR('1996-9-8') as;
SELECT YEAR(hiredate) asFROM employees;
SELECT MONTH(NOW()) AS; 
SELECT MONTHNAME(NOW()) AS;#显示英文月份

#5.STR_TO_DATE(str,format):将字符通过指定的格式转换成日期

SELECT STR_TO_DATE('1996-9-8','%Y-%c-%d') as out_put;

#案例:查询入职日期为1992-4-3的员工信息

SELECT *
FROM employees
WHERE hiredate=STR_TO_DATE('4-3 1992','%c-%d %Y');

#6.DATE_FORMAT(date,format):将日期转换成字符

SELECT DATE_FORMAT(now(),'%y年%m月%d日') as out_put;

#查询有奖金的员工名和入职日期(XX月/XX日 XX年)

SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年') as 入职日期
FROM employees
WHERE commission_pct is not null;

**

四.其他函数

**

SELECT VERSION();
SELECT DATABASE();
SELECT USER();

**

五.流程控制函数

**
#1.IF函数:if else的效果

SELECT IF(10<5,'大','小');
SELECT last_name,commission_pct,IF(commission_pct is null,'没奖金,呵呵','有奖金,哈哈') as 备注
FROM employees;

#2.CASE 函数使用一:

/*
CASE 要判断的字段或表达式
WHEN 常量1 THEN 要显示的值1或语句1;
WHEN 常量2 THEN 要显示的值2或语句2;

ELSE 要显示的值n或语句n;
END;
*/

*/*案例:查询员工的工资,要求
部门号=30,显示的工资为1.1倍;
部门号=40,显示的工资为1.2倍;
部门号=50,显示的工资为1.3倍;
其他部门,显示的工资为原始工资。
/

SELECT salary as 原始工资,department_id,
CASE department_id
	WHEN 30 THEN salary*1.1
	WHEN 40 THEN salary*1.2	
	WHEN 50 THEN salary*1.3
	ELSE salary	
END AS 新工资
FROM employees;

#3.CASE 函数使用二:

/*
CASE
WHEN 条件一 THEN 要显示的值1或语句1
WHEN 条件二 THEN 要显示的值2或语句2

ELSE 要显示的值n或语句n
END
*/

/
案例:查询员工的工资情况:
如果工资>20000,显示A级别;
如果工资>15000,显示B级别;
如果工资>10000,显示C级别;
否则,显示D级别
/

SELECT salary,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END AS 工资级别
FROM employees;
发布了4 篇原创文章 · 获赞 3 · 访问量 79

猜你喜欢

转载自blog.csdn.net/lxyzx616/article/details/104101381