mysql:DQL常见函数

一.单行函数

1.字符函数

1.1 length

获取字节个数 (注意不是字符数!!)
e.g.
select length(‘hello’);返回的是5
select length(“你好呀”);返回的是9(一个汉字占3个字节)

1.2 concat

拼接字符串

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

在这里插入图片描述

1.3 upper、lower

upper:将字符全部变成大写
lower:将字符全部变成小写

1.4 substr

截取字符串

#截取从指定索引处后面所有字符
SELECT SUBSTR('并肩于雪山之巅',4)  AS out_put;

在这里插入图片描述

#截取从指定索引处指定字符长度的字符
SELECT SUBSTR('并肩于雪山之巅',1,3) AS out_put;

返回的是“并肩于”
注意:和Python不一样,sql中字符串的索引是从1开始的!!!

1.5 instr

返回子串第一次出现的索引,如果找不到返回0

SELECT INSTR('孤舟随烟波渡我','渡我') AS out_put;

返回6

SELECT INSTR('孤舟随烟波渡我','费') AS out_put;

返回0

1.6 trim

去掉字符串两端的指定子串,如果没有指定子串,那么默认为空白

SELECT TRIM('   并肩于    雪山之巅       ') AS out_put;

在这里插入图片描述

SELECT TRIM('**' FROM '*****并肩于***雪山之巅****')  AS out_put;

在这里插入图片描述
‘并肩于’前面有5个*,我们指定的子串是**,所以两个两个地删除,最后剩一个*。‘雪山之巅’后面有4个’*’,两个两个地删除,正好能删完。

1.7 lapd

用指定字符串左填充原始字符串到指定字符长度(不是字节长度!),当指定长度小于原始字符串的长度时,按指定长度截取原始字符串。

SELECT LPAD('并肩于雪山之巅',20,'*') AS out_put;
SELECT LPAD('并肩于雪山之巅',2,'*') AS out_put;

第一个返回:‘*************并肩于雪山之巅’
第二个返回:‘并肩’

1.8 rpad

用指定字符串右填充原始字符串到指定字符长度(不是字节长度!),当指定长度小于原始字符串的长度时,按指定长度截取原始字符串

SELECT RPAD('并肩于雪山之巅',12,'wx') AS out_put;
SELECT RPAD('并肩于雪山之巅',2,'wx') AS out_put;

第一个返回:‘并肩于雪山之巅wxwxw’
第二个返回:‘并肩’

1.9 replace

用指定字符串替换原始字符串中所有的另一指定字符串

SELECT REPLACE('忘羡忘羡忘羡忘羡很好听','忘羡','无羁') AS out_put;

返回:‘无羁无羁无羁无羁很好听’

2.数学函数

2.1 round

四舍五入
select round(-1.55);返回-2
select round(-1.5679,2);返回-1.57

2.2 truncate

保留指定小数位数
select truncate(-1.5679,2);返回-1.56

2.3 ceil

返回大于该数的最小整数
select ceil(-1.02);返回-1
select ceil(1.02);返回2

2.4 floor

返回小于该数的最大整数
select floor(-1.02);返回-2
select floor(1.02);返回1

2.5 mod 或 %

取余数
select mod(10,-3);返回1
select 10%-3;返回1

3.日期函数

3.1 now

返回当前系统日期+时间

select now() as 当前时间;

在这里插入图片描述

3.2 curdate

返回当前系统日期 (cur值current)

SELECT CURDATE();

在这里插入图片描述

3.3 curtime

返回系统当前时间,不包括日期

SELECT CURTIME();

在这里插入图片描述

3.4 year/month(monthname)/day/hour/minute/second

返回指定部分的年、月、日、时、分、秒
select year(now());返回2020
select month(now());返回3
select monthname(now());返回March (month返回数字,monthname返回英文)
select day(‘1997-12-01’);返回1

SELECT  YEAR(hiredate) ASFROM employees;

在这里插入图片描述
原始的hiredate长这个样子:
在这里插入图片描述

3.5 str_to_date

将某一字符串转换成"四位数年份-两位数月份-日期"的日期格式
在这里插入图片描述

SELECT STR_TO_DATE('1997-8-5','%Y-%c-%d') AS out_put;
#括号内第一个参数填入你要转换的字符串,第二个参数填入待转换字符串的格式

在这里插入图片描述

SELECT STR_TO_DATE('web生日是1997年08月5号','web生日是%Y年%m月%d号') AS 生日;

在这里插入图片描述

SELECT STR_TO_DATE('其实前面这些都是废话,今天是20年3月14号,祝大家白色情人节快乐','其实前面这些都是废话,今天是%y年%c月%d号,祝大家白色情人节快乐') AS 转换结果;

在这里插入图片描述

3.6 date_format

把日期格式转换成字符串
注意:这里的日期格式不单单指上述"四位数年份-两位数月份-日期"这样的日期格式

SELECT DATE_FORMAT('1997/08.05','小王出生于%y年,%c月,%d号。') AS 小王生日;

在这里插入图片描述

4. 流程控制函数

4.1 if函数

SELECT IF(22<29,'小王年纪小','小王年纪大') AS 结果;

condition为true,则返回扩号内第二个值,为false则返回第三个值
在这里插入图片描述

4.2 case函数

  • 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;

在这里插入图片描述

  • case的第二种用法:
    case
    when 条件1 then 要显示的值1或语句1
    when 条件2 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;

在这里插入图片描述

二.分组函数

min,max,count,avg,sum

  • 特点:
    1.sum\avg一般用于处理数值型数据,max、min、count可以处理任意类型
    2.分组函数都忽略了null值
    3.可和distinct搭配实现去重运算



在这里插入图片描述

发布了43 篇原创文章 · 获赞 1 · 访问量 743

猜你喜欢

转载自blog.csdn.net/weixin_41391619/article/details/104855092
今日推荐