进阶4:常见函数

#进阶4:常见函数
/*
概念:类似于C语言函数,将一组逻辑语句封装在方法体中,对外暴露方法名
好处:
1、隐藏实现细节
2、提高代码重用性
调用:select函数名(实参列表)【from表】;
特点:
①叫什么(功能名)
②干什么(函数功能)
分类:
1、单行函数
如:concat、length、ifnull等
2、分组函数
功能:做统计使用、又称统计函数、聚合函数、组函数
*/
#一、字符函数

#length
SELECT LENGTH('jhon'); 
SELECT LENGTH('张三丰hahaha');
SHOW 	VARIABLES LIKE '%char%';#查看字符编码类型

#2、concat 拼接字符串

SELECT CONCAT (last_name,'-',first_name) FROM employees;

#3、upper\lower

SELECT UPPER('john');
SELECT LOWER('john');
#示例:姓变大写名变小写
SELECT 
	CONCAT(UPPER(last_name),'_',LOWER(first_name)) 
FROM 
	employees;

#4、substr\substring

#注意:索引从1开始
#索引使用一个数字是截取指定数字后的所有字符
SELECT SUBSTRING('李莫愁爱上了张若愚' ,6) AS out_put;
SELECT SUBSTRING('李莫愁爱上了张若愚' ,7) AS out_put;
#所应使用两个字符是截取指定数字后的指定长度
SELECT SUBSTR('李莫愁爱上了张若愚',1,3) AS out_put;

#案例:姓名中首字符大写其他字符小写用下划线拼接

SELECT      CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2)))
FROM 
	employees;
SELECT 	CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(CONCAT(last_name,first_name),2)))
FROM 
	employees;

#5、instr
#返回指定字符串的第一次出现的起始位置

SELECT
	INSTR('杨不悔爱上殷梨亭','殷梨亭') AS out_put
FROM
	employees;

#6、trim 截取字符串前后指定同类型字符

SELECT
	LENGTH(TRIM('   张翠山   ')) AS out_put;
SELECT
	LENGTH(TRIM(' ' FROM '   张翠山   ')) AS out_put;	
SELECT
	TRIM('a' FROM 'aaaaaaaa张翠aaaa山aaaa') AS put_put;

#7、lpad 用指定的字符进行左填充

SELECT LPAD('殷素素',10,'*') AS out_put;
SELECT LPAD('殷素素',2,'*') AS out_put;
#7、rpad 用指定的字符进行右填充
SELECT RPAD('殷素素',10,'*') AS out_put;
SELECT RPAD('殷素素',2,'*') AS out_put;

#8、replace替换

SELECT REPLACE('周芷若爱上了张无忌','周芷若','赵敏');

#二、数学函数
#1、round 四舍五入
#默认取整

SELECT ROUND(1.43);
#保留小数点后两位
SELECT ROUND(1.6625,2);

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

SELECT CEIL(1.02);
SELECT CEIL(-1.02);

#3、floor 向下取整,返回<=该参数的最小整数

SELECT FLOOR(1.02);
SELECT FLOOR(-1.02);
#4、truncate 截断
SELECT TRUNCATE (1.666999,3);

#5、mod 取余
#第一个数为正结果为正,第一个数为符结果为负

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

#三、日期函数
#1、now 返回当前时间

SELECT NOW();

#2、curdate 返回当前日期,不包含时间

SELECT CURDATE();
```sql
#3、curtime 返回当前时间,不包含日期
```sql
SELECT CURTIME();

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

SELECT YEAR(NOW());
SELECT YEAR('1998-1-1');
SELECT YEAR(hiredate)FROM employees;
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW());
#......

#5、str_to_date将字符通过指定格式转换成日期
在这里插入图片描述

SELECT STR_TO_DATE('1998-6-9','%Y-%c-%d') out_put;
#案例:查询日期为1994-4-3的员工信息
SELECT 
	*
FROM
	employees
WHERE
	hiredate = '1994-4-3';
SELECT 
	*
FROM
	employees
WHERE
	hiredate = STR_TO_DATE('3-4-1994','%d-%m-%Y');

#6、date_format将日期转换成字符

SELECT DATE_FORMAT(NOW(),'%Y年-%c月-%d日') out_put;
#查询有奖金的员工的员工姓名和入职日期(年月日)
SELECT
	last_name,
	DATE_FORMAT(hiredate,'%Y年%m月%d日')
FROM
	employees
WHERE
	commission_pct IS NOT NULL;

#四、其他函数

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

#五、流程控制函数
#1、if函数:if else的效果
#类似于三目运算符

SELECT 
	last_name,
	commission_pct,
	IF(commission_pct IS NULL,'没有奖金','有奖金') 备注
FROM
	employees;

#2、case函数

/*
#①switch case效果
	case 要判断的的字段或表达式
	when 常量1 then 要显示的值1或语句;
	case 要判断的的字段或表达式
	when 常量2 then 要显示的值2或语句;
	....
	end
*/

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

SELECT
	salary 原始工资,
	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;
/*

#②多重if效果

case (不加东西)
when 条件1 then 要显示的值1或语句;
case 要判断的的字段或表达式
when 条件2 then 要显示的值2或语句;
....
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 'D级别'
ELSE 'C级别'
END
FROM employees;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值