mysql——常见函数

女生的网名这么多〃 提交于 2020-03-06 16:16:45

#进阶4:常见函数

/*
概念:类似于java中的方法,将一组逻辑语句封装在方法中,对外暴露方法名

好处:1、隐藏了实现细节。2、提高代码的重用性
调用:select 函数名(实参列表)  from 表
特点:    ①函数名
    ②函数功能
分类:    ①单行函数
        如:concat、ifnull、length等
        传一个值,返回一个值
    ②分组函数(统计函数、聚合函数、组函数)
        功能:做统计使用的
        传一组值,返回一个值

*/

单行函数 

一、字符函数
#length  获取参数的字节个数

SELECT LENGTH('join');            #4
SELECT LENGTH('张三丰hahaha');        #15,一个汉字占三个字节,一个字母一个字节

SHOW VARIABLES LIKE '%char%';        #显示当前系统支持的字符集

#concat  拼接字符串

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

#upper/lower

SELECT UPPER('join');    #将参数变为大写
SELECT LOWER('JOIN');    #将参数变为小写

#案例1:将姓变大写,将名变小写

SELECT CONCAT(UPPER(last_name),LOWER(first_name)) AS 姓名
FROM employees;

#substr/substring    #截取字符
从所引出截取剩余全部字符

SELECT SUBSTR('李莫愁爱上了路展元',7) AS output;    -- 索引从1开始

截取从指定索引处开始,指定长度的字符

SELECT SUBSTR('李莫愁爱上了陆展元',1,3) output;


#案例:姓名中首字母大写,其他字符小写,用下划线拼接显示出来

USE myemployees;

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

#instr(str1,str2)  返回str1中最早出现str2的位置 ,如果找不到返回0

SELECT INSTR('杨不殷六侠悔爱上了殷六侠','殷六侠') AS output;

#trim  去掉字符串前后的指定字符,如不指定默认去除空格,中间的特殊字符无法去除

SELECT TRIM('   李乐  0612') AS output;
SELECT TRIM('l' FROM 'llllllllllllllllll李lll乐lllll') AS output;

        

#lpad(str1,i,str2) 左填充 用指定的str2左填充str1到指定长度i。
#如果填充的长度i小于str1则从左向右截取str1中的i个字符 

SELECT LPAD('殷素素',10,'*') AS output;
SELECT LPAD('殷素素',1,'*') AS output;

       

#rpad(str1,i,str2) 右填充   用指定的str2右填充str1到指定长度i。
#如果填充的长度i小于str1则从右向左截取str1中的i个字符 

SELECT RPAD('殷素素',10,'*') AS output;
SELECT RPAD('殷素素',1,'*') AS output;

       

#replace(str1,str2,str3)  替换  str3替换str1中的str2,如果存在多出str2,则全部替换

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

 

 

二、数学函数

#round  四舍五入

SELECT ROUND(3.14);
SELECT ROUND(3.54);
SELECT ROUND(-3.14);
SELECT ROUND(-3.54);

#round(x,i)  四舍五入,x保留i位小数

SELECT ROUND(3.14,1);

#ceil 向上取整,返回大于等于该参数的最小整数

SELECT CEIL(-3.14);

#floor 向下取整,返回小于等于该参数的最大整数

SELECT FLOOR(-3.14);

#truncate(num1,i)  截断函数,保留指定的小数位数
#对num1截断,保留i位小数

SELECT TRUNCATE(3.14,1);

#mod(a,b)  取模/取余  被除数为正结果则为正,被除数为负,结果则为负
#结果为:a-a/b*b   a/b如果ab均为整数的话,则结果也为整数

SELECT MOD(10,3);    #10%3==1
SELECT MOD(10,-3);    #10%-3==1
SELECT MOD(-10,3);    #-10%3==-1
SELECT MOD(-10,-3);    #-10%-3==-1

三、日期函数

#1、now   用于返回当前系统日期+时间

SELECT NOW();

#curdate  返回当前系统的日期

SELECT CURDATE();

#curtime  返回当前系统的时间

SELECT CURTIME();#获取指定的部分:年、月、日、小时、分钟、秒
SELECT YEAR(NOW());    #显示年份
SELECT YEAR('1997-06-12');    #显示指定字符串中的年份

USE myemployees;
SELECT YEAR(hiredate)
FROM employees;

SELECT MONTH(NOW());    #显示当前月份
SELECT MONTHNAME(NOW());    #显示当前月份的英文名称

SELECT SECOND(NOW());    #显示当前时间的秒数

#str_to_date(str1,str2)  #将str1按照str2的格式进行简析日期

SELECT STR_TO_DATE('1997-06-12','%Y-%d-%m');

常见格式转换符

#date_formate    将日期转换为指定格式的字符

SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日');


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

SELECT last_name,DATE_FORMAT(hiredate,'%Y年/%m月/%d日'),commission_pct
FROM employees
where not(commission_pct is null); #以下方法均可使用
WHERE commission_pct IS NOT NULL;

四、其他函数

SELECT VERSION();    #查看数据库的版本
SELECT DATABASE();    #查看当前数据库名称
SELECT USER();        #查看当前用户


五、流程控制函数#1、if函数:实现if..else功能
#if(expr1,expr2,expr3)    ==  expr1?expr2:expr3
 

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

SELECT last_name,commission_pct,IF(commission_pct IS NOT NULL,'有奖金','没有奖金') AS 备注
FROM employees
ORDER BY LENGTH(last_name) DESC;


 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!