MySQL 函数
1.函数
概念 类似于Java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。 好处 1、隐藏了实现细节。 2、提高了代码的重用性。 调用 select 函数名(实参列表)【from 表】。from 表 根据需要可加可不加,如果函数的参数列表中用到表中的字段,那么就需要加上。 特点 ①叫什么(函数名)②干什么(函数功能) 分类 ①单行函数 如concat、length、ifnull等等。②分组函数 功能:做统计使用,又称为统计函数、聚合函数、组函数。
2.单行函数
2.1字符函数
2.1.1 LENGTH
length 获取参数值的字节 个数。 SELECT LENGTH(“mysql”); 结果为5。 SELECT LENGTH(“mysql最牛”); 结果为11。 补充,SHOW VARIABLES LIKE '%char%' 查看当前客户端的字符集。 在UTF8字符集中一个字母占用1个字节空间,一个汉字占用3个字节空间。所以mysql占5个字节空间大小,mysql最牛占用11个字节空间大小。
2.1.2 CONCAT
拼接 字符串。 例一,拼接employees表中的姓和名,姓和名之间用_连接;
2.1.3 UPPER && LOWER
UPPER将小写转大写。 LOWER将大写转小写。 例一:将mysql转大写; 例二:将MYSQL转小写; 例三:拼接employees表中的姓和名,姓大写,名小写。 在例三中我们发现,函数中可以嵌套函数,也就说一个函数的返回值可以作为另一个函数的参数。
2.1.4 SUBSTR / SUBSTRING
注意: 在MySQL字符串中索引是从1开始的。 1)SUBSTR(str,pos); 截取从指定索引处后面的字符,从字符串中第pos个字符开始往后分割作为结果返回。 2)SUBSTR(str,pos,len); 截取从指定索引处指定字符长度的字符。 例题:姓名中首字符大写,其他字符小写然后用_拼接,显示出来。
2.1.5 INSTR
INSTR 返回字符串中第一次出现的索引位置的下标,如果没有则返回0;
2.1.6 TRIM
TRIM(str); 去掉str字串左右的空格。 TRIM(str1 FROM str2); 去掉str2字串左右的所有的str1字串,只去左右,如果str中包含str1,str2不做改变。 TRIM(str); TRIM(str1 FROM str2);
2.1.7 LPAD && RPAD
LPAD 用指定的字符实现左填充指定长度,如果指定长度比给字符串长度小,那么从左开始截断。
RPAD 用指定的字符实现右填充指定长度,如果指定长度比给字符串长度小,那么也从左开始截断。
2.1.8 REPLACE
REPLACE(str,from_str,to_str) 用to_str替换str中的所有from_str;
2.2 数学函数
2.2.1 ROUND
ROUND 四舍五入 ROUND(X) ,对X四舍五入(取整)。 ROUND(X,D) ,X小数点后保留D位,同时四舍五入。 ROUND(X) ROUND(X,D)
2.2.2 CEIL
CEIL(X) 返回>=该参数X的最小整数。
2.2.3 FLOOR
FLOOR(X) 返回<=该参数X的最大整数。
2.2.4 TRUNCATE
TRUNCATE(X,D) ,对X保留小数点后D位。
2.2.5 MOD
MOD(n,m) ,取余操作,相当于 n % m;
2.3 日期函数
2.3.1 NOW
NOW() ,返回当前系统日期 + 时间
2.3.2 CURDATE
CURDATE ,返回当前系统日期,不包含时间。
2.3.3 CURTIME
CURTIME ,返回当前系统时间,不包含日期。
2.3.4 获取指定的部分,年、月、日、小时、分钟、秒
以获取年为例 YEAR(date); 获取月:MONTH();MONTHNAME()可使获取的月份用英文显示。 获取日:DAY(); 获取小时():HOUR(); 获取分钟:MINUTE(); 获取秒:SECONDE();
2.3.5 STR_TO_DATE
STR_TO_DATE(str,format) ,将日期格式的字符转换成指定格式的日期。 格式符如下: 例一:将’1-1-2022’ 转换为日期。 例二:查询入职日期为1992-4-3的员工信息。 我们可以用 SELECT * FROM employees WHERE hiredate = ‘1992-4-3’;语句查询,但是在用户使用中往往并不是按正确日期格式输入的,如’4-3 1992’,那么我们查询的时候就要将其转换为标准日期格式了。
2.3.6 date_format
date_format(date,format) 将日期转换成字符。 格式符如下: 例一:将当前系统日期转换为 xxxx年x月xx日。 例二:查询有奖金的员工名和入职日期,入职日期按xx月/xx日/xx年格式输出。
2.4 流程控制函数
2.4.1 IF
IF(expr1,expr2,expr3) ,如果expr1为真,则返回expr2,否则返回expr3; 例一:判断2 > 1吗?如果大则返回大,否则返回小。 例二:查询员工表中的员工姓名和奖金,如果员工有奖金备注恭喜恭喜!!,没有没有奖金备注你好惨!。
2.4.2 CASE
使用一 (和Java中的switch case 语句很像) case 要判断的字段或表达式 when 常量1then 要显示的值1或语句1; when 常量2 then 要显示的值2或语句2; ... else 要显示的值n或语句n; end
注意:如果then和else后面跟的是值后面不要加; 如果跟的是语句要加; 案例: 查询员工的工资,要求 部门号 = 30,显示的工资为1.1倍 部门号 = 40,显示的工资为1.2倍 部门号 = 50,显示的工资为1.3倍 其他部门,显示的工资为原工资 使用二 (和Java中的多重if很像) case when 条件1 then 要显示的值1或语句1 when 条件2 then 要显示的值2或语句2 when 条件3 then 要显示的值3或语句3 ... else 要显示的值n或语句n end 注意:同样,如果then和else后面跟的是值后面不要加; 如果跟的是语句要加; 案例: 查询员工的工资情的情况 如果工资>20000,显示A级别 如果工资>15000,显示B级别 如果工资>10000,显示C级别 否则,显示D级别
|