sql常用函数

                                                                                单行函数

字符函数:

  • length 获取参数值的字节个数 

select length("john")

  • concat 拼接字符串

select concat( last_name,"_",first_name ) as 姓名 form employees

  • upper , lower 将参数值变大写,小写

select upper("john")

  • substr, substring 字符串截取(索引从1开始,长度为字符长度)

//输出 陆展元 截取从第7个到尾部  

select substr('李莫愁爱上了陆展元',7)     

//输出 李莫愁 截取从第1个开始的3个字符

select substr('李莫愁爱上了陆展元',1,3)   

  • instr 返回子串在字符串中的起始索引,如果找不到返回0

//输出 7

select instr('李莫愁爱上了陆展元','陆展元')

  • trim 去除前后的空格或指定字符

//输出 李  莫  愁

select trim('   李  莫  愁  ') 

//输出 李aaa莫aaa愁

select trim('a', 'aaaaaaa李aaa莫aaa愁aaaaaaaa')

  • lpad 在起始位置填充指定字符直到整个字符串达到指定长度

//输出 *******李莫愁   

select lpad('李莫愁',10,'*')

 

//字符串最后输出长度一定是指定的长度,如果不足则用指定字符左填充,如果超过,则从开始处删减字符直到长度等于指定长度   

select lpad('李莫愁',2,'*')   //输出 莫愁

  • rpad 在末尾位置填充指定字符直到整个字符串达到指定长度

  • replace 替换

//输出 小龙女爱上了陆展元   

select replace('李莫愁爱上了陆展元','李莫愁','小龙女')

 


数学函数:

  • round 四舍五入

//输出 2

select round(1.65)

//输出 1.66  小数点后保留2位

select round(1.657,2)

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

  • floor 向下取整,返回<=该参数的最大整数

//输出 -1

select ceil(-1.65)

//输出 -2

select floor(-1.65)

  • truncate 截断

//输出 1.6 从小数点后1位截断

select truncate(1.65,1)

  • mod 取余

//输出 1 相当于10%-3

select mod(10,-3)

 


日期函数:

  • now 返回当前系统日期+时间

  • curdate 返回当前系统日期,不包含时间

  • curtime 返回当前时间,不包含日期

//可以获取指定的部分,年、月、日、小时、分钟、秒

SELECT YEAR(NOW()) 年;

SELECT YEAR('1998-1-1') 年;

SELECT MONTH(NOW()) 月;

SELECT MONTHNAME(NOW()) 月; //输出月份英文

  • str_to_date 将字符通过指定的格式转换成日期

// 1998-03-02

SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') ;

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

 

  • date_format 将日期转换成字符

// 20年10月08日

SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;

 


其他函数:

  • SELECT VERSION()   查看版本号

  • SELECT DATABASE() 查看当前的库

  • SELECT USER()  查看 当前用户

 


流程控制函数:

  • if: if else 的效果

// 小

SELECT IF(10<5,'大','小');

//

SELECT last_name,commission_pct,IF(commission_pct IS NULL,'没奖金,呵呵','有奖金,嘻嘻') as 备注

FROM employees;

  • case : switch 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 原始工资,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

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;

 

 


 

 

分组函数

  • sum 求和     忽略nul值

  • avg 平均值   忽略nul值

  • max 最大值  忽略nul值

  • min 最小值  忽略nul值

  • count 计算个数  忽略nul值

可以搭配distinct实现去重求值

//输出 表中所有行的salary列的和

select sum(salary) from employees

//输出 表中所有行的salary列非空的有几个,若全部不为null,则为表的行数

select count(salary) from employees

//输出 表中salary列不相同的且非空的有几个

select count(distinct salary) from employees

//输出 表有多少行

select count(1) from employees

select count(*) from employees

计算表行数,效率比较:

myisam存储引擎下   count(*) 的效率高

innodb存储引擎下    count(*)和count(1)效率差不多,比count(字段)要高

因而统计行数时,使用count(*)统计较好

 

 

分组查询

  • group by

 

/*

语法:

select 查询列表

from 表

【where 筛选条件】

group by 分组的字段

【order by 排序的字段】;

 

#案例1:查询每个工种的员工平均工资

SELECT AVG(salary),job_id

FROM employees

GROUP BY job_id;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值