单行函数
Posted qywu2019
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单行函数相关的知识,希望对你有一定的参考价值。
#进阶4:常见函数 /* 概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名 好处:1、隐藏了实现细节 2、提高代码的重用性 调用:select 函数名(实参列表) 【from 表】; 特点: ①叫什么(函数名) ②干什么(函数功能) 分类: 1、单行函数 如concat,length,ifnull等 分类:字符函数 数学函数 日期函数 其他函数【补充】 流程控制函数【补充】 2、分组函数 功能:做统计使用,又称统计函数、聚合函数、组函数 常见函数: 字符函数:length concat substr instr trim upper lower lpad rpad replace 数学函数: round ceil floor truncate mod 日期函数: now curdate curtime year month monthname day hour minute second str_to_date date_format 其他函数 version database user 控制函数 if case */ #一、字符函数 #1.length 获取参数值的字节个数 SELECT LENGTH(‘john‘);#列名,常量 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、subtring 注意:索引从1开始 #截取从指定索引处后面所有字符 SELECT SUBSTR(‘李莫愁爱上了陆展元‘,7) output; #截取从指定索引处指定长度的字符 SELECT SUBSTR(‘李莫愁爱上了陆展元‘,1,3) output; #案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来 SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),‘_‘,LOWER(SUBSTR(last_name,2))) output FROM employees; #5.instr 返回子串第一次出现的索引,如果找不到返回0 SELECT INSTR(‘杨不悔爱上了殷六侠‘,‘殷六侠‘) AS out_put; #6.trim SELECT LENGTH(TRIM(‘ 张翠山 ‘)) AS ou_out; SELECT TRIM(‘a‘ FROM ‘aaaaaaa张aaaaa翠山aaaaaaaaaa‘) AS out_put; #7.lpad用指定的字符实现左填充指定长度 SELECT LPAD(‘殷素素‘,2,‘*‘) AS out_put; #8.rpad用指定的字符实现左填充指定长度 SELECT RPAD(‘殷素素‘,12,‘*‘) AS out_put; #replace 替换 SELECT REPLACE(‘张无忌爱上周芷若了周芷若周芷若周芷若周芷若‘,‘周芷若‘,‘赵敏‘) AS out_put; #二、数学函数 #round 四舍五入 SELECT ROUND(1.65); SELECT ROUND(1.567,2); #ceil 向上取整,返回>=该参数的最小值 SELECT CEIL(-1.02); #floor 向下取整,返回<=该参数的最大整数 SELECT FLOOR(-9.99); #truncate 截断 SELECT TRUNCATE(1.65,1); #mod 取余 /* mod(a,b); a-a/b*b mod(-10,-3) -10-(-10)/(-3)*(-3) */ SELECT MOD(10,3); SELECT 10%3; #三、日期函数 #now 返回当前系统日期+时间 SELECT NOW(); #curdate 返回当前系统日期,不包含时间 SELECT CURDATE(); #curtimes 返回当前时间,不包含日期 SELECT CURTIME(); #可以获取指定部分,年、月、日、小时、分钟、秒 SELECT YEAR(NOW()) 年; SELECT YEAR(‘1998-1-1‘) 年; SELECT YEAR(hire_date) 年 FROM employees; SELECT MONTH(NOW()) 月; SELECT MONTHNAME(NOW()) 月; #str_to_date将字符通过指定的格式转换成日期 SELECT STR_TO_DATE(‘1998-3-2‘,‘%Y-%c-%d‘) AS output; #查询入职日期为1992--4-3的员工信息; SELECT * FROM employees WHERE hire_date = ‘1992-3-4‘; SELECT * FROM employees WHERE hire_date = STR_TO_DATE(‘3-4 1992‘,‘%c-%d %Y‘); #date_format 将日期转换为字符 SELECT DATE_FORMAT(NOW(),‘%y年%m月%d日‘); #查询有奖金员工的名和入职日期(xx月/xx日 xx年) SELECT last_name,DATE_FORMAT(hire_date,‘%m月/%d日 %y年‘) 入职日期 FROM employees WHERE commission_pet IS NOT NULL; #四、其他函数 SELECT VERSION(); SELECT DATABASE(); SELECT USER(); #五、流程控制函数 #1.if函数: if else的效果 SELECT IF(10>5,‘大‘,‘小‘); SELECT last_name,commission_pet,IF(commission_pet IS NULL,‘没奖金,呵呵‘,‘有奖金,嘻嘻‘) 备注 FROM employees; #2.case函数的使用一:switch case的效果 /* java中 switch(变量或者表达式){ case 常量1:语句1;break; ... default:语句n;break; } mysql中 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; #3.case 函数的使用二,类似于多重if /* java中: if(条件1){ 语句1; }else if(条件2){ 语句2; } ... else{ 语句n; } mysql中: 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 AS 工资级别; #1. 显示系统时间(备注日期时间) SELECT NOW() #2. 查询员工工号,姓名,工资以及工资提高百分之20%后的结果(new salary) SELECT employee_id,last_name,salary,salary*(1+20%) FROM employees #3. 将员工姓名按首字母排序,并写出姓名的长度(length) SELECT LENGTH(last_name) 长度,SUBSTR(last_name,1,1) 首字符,last_name FROM employees ORDER BY 首字符; #4. 做一个查询,产生下面的结果 <last_name> earns <salary> monthly but wants <salary*3> Dream Salary King earns 24000 monthly but wants 72000 SELECT CONCAT(last_name,‘earns‘,salary,‘ monthly but wants ‘,salary*3) AS "Dream salary" FROM employees; #5.使用case——when,按照下面的条件; job grade AD_PRES A ST_MAN B IT_PROG C SA_REP D ST_CLERK E SELECT last_name,job_id AS job, CASE job_id WHEN ‘AD_PRES‘ THEN ‘A‘ WHEN ‘ST_MAN‘ THEN ‘B‘ WHEN ‘IT_PROG‘ THEN ‘C‘ WHEN ‘SA_REP‘ THEN ‘D‘ WHEN ‘ST_CLERK‘ THEN ‘E‘ END AS Grades FROM employees WHRE job_id=‘AD_RES‘ #进阶4:常见函数/*概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名好处:1、隐藏了实现细节 2、提高代码的重用性调用:select 函数名(实参列表) 【from 表】;特点: ①叫什么(函数名) ②干什么(函数功能)分类: 1、单行函数 如concat,length,ifnull等 分类:字符函数 数学函数 日期函数 其他函数【补充】 流程控制函数【补充】 2、分组函数 功能:做统计使用,又称统计函数、聚合函数、组函数 常见函数: 字符函数:length concat substr instr trim upper lower lpad rpad replace 数学函数: round ceil floor truncate mod 日期函数: now curdate curtime year month monthname day hour minute second str_to_date date_format 其他函数 version database user 控制函数 if case*/ #一、字符函数#1.length 获取参数值的字节个数SELECT LENGTH(‘john‘);#列名,常量SELECT LENGTH(‘张三丰hahaha‘); SHOW VARIABLES LIKE ‘%char%‘; #2.concat 拼接字符串SELECT CONCAT(last_name,‘_‘,first_name) 姓名FROM employees; #3.upper,lowerSELECT UPPER(‘john‘);SELECT LOWER(‘joHn‘);#示例:将姓变大写,名小写,然后拼接SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名FROM employees; #4.substr、subtring注意:索引从1开始#截取从指定索引处后面所有字符SELECT SUBSTR(‘李莫愁爱上了陆展元‘,7) output; #截取从指定索引处指定长度的字符SELECT SUBSTR(‘李莫愁爱上了陆展元‘,1,3) output; #案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),‘_‘,LOWER(SUBSTR(last_name,2))) outputFROM employees; #5.instr 返回子串第一次出现的索引,如果找不到返回0SELECT INSTR(‘杨不悔爱上了殷六侠‘,‘殷六侠‘) AS out_put; #6.trimSELECT LENGTH(TRIM(‘ 张翠山 ‘)) AS ou_out;SELECT TRIM(‘a‘ FROM ‘aaaaaaa张aaaaa翠山aaaaaaaaaa‘) AS out_put; #7.lpad用指定的字符实现左填充指定长度SELECT LPAD(‘殷素素‘,2,‘*‘) AS out_put; #8.rpad用指定的字符实现左填充指定长度SELECT RPAD(‘殷素素‘,12,‘*‘) AS out_put; #replace 替换SELECT REPLACE(‘张无忌爱上周芷若了周芷若周芷若周芷若周芷若‘,‘周芷若‘,‘赵敏‘) AS out_put; #二、数学函数 #round 四舍五入SELECT ROUND(1.65);SELECT ROUND(1.567,2); #ceil 向上取整,返回>=该参数的最小值SELECT CEIL(-1.02); #floor 向下取整,返回<=该参数的最大整数SELECT FLOOR(-9.99); #truncate 截断SELECT TRUNCATE(1.65,1); #mod 取余/*mod(a,b); a-a/b*b mod(-10,-3) -10-(-10)/(-3)*(-3)*/SELECT MOD(10,3);SELECT 10%3; #三、日期函数 #now 返回当前系统日期+时间SELECT NOW(); #curdate 返回当前系统日期,不包含时间SELECT CURDATE(); #curtimes 返回当前时间,不包含日期SELECT CURTIME(); #可以获取指定部分,年、月、日、小时、分钟、秒SELECT YEAR(NOW()) 年;SELECT YEAR(‘1998-1-1‘) 年; SELECT YEAR(hire_date) 年 FROM employees; SELECT MONTH(NOW()) 月;SELECT MONTHNAME(NOW()) 月; #str_to_date将字符通过指定的格式转换成日期SELECT STR_TO_DATE(‘1998-3-2‘,‘%Y-%c-%d‘) AS output; #查询入职日期为1992--4-3的员工信息;SELECT * FROM employees WHERE hire_date = ‘1992-3-4‘; SELECT * FROM employees WHERE hire_date = STR_TO_DATE(‘3-4 1992‘,‘%c-%d %Y‘); #date_format 将日期转换为字符SELECT DATE_FORMAT(NOW(),‘%y年%m月%d日‘); #查询有奖金员工的名和入职日期(xx月/xx日 xx年)SELECT last_name,DATE_FORMAT(hire_date,‘%m月/%d日 %y年‘) 入职日期FROM employeesWHERE commission_pet IS NOT NULL; #四、其他函数 SELECT VERSION();SELECT DATABASE();SELECT USER(); #五、流程控制函数#1.if函数: if else的效果SELECT IF(10>5,‘大‘,‘小‘); SELECT last_name,commission_pet,IF(commission_pet IS NULL,‘没奖金,呵呵‘,‘有奖金,嘻嘻‘) 备注FROM employees; #2.case函数的使用一:switch case的效果/*java中switch(变量或者表达式){ case 常量1:语句1;break; ... default:语句n;break;}mysql中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_idWHEN 30 THEN salary*1.1WHEN 40 THEN salary*1.2WHEN 50 THEN salary*1.3ELSE salaryEND AS 新工资FROM employees; #3.case 函数的使用二,类似于多重if/*java中:if(条件1){ 语句1;}else if(条件2){ 语句2;}...else{ 语句n;}mysql中:casewhen 条件1 then 要显示的值1或语句1;when 条件2 then 要显示的值2或语句2;...else 要显示的值n或语句nend*/ #案例:查询员工的工资的情况如果工资>20000,显示A级别如果工资>15000,显示B级别如果工资>10000,显示c级别否则,显示D级别SELECT salary,CASE WHEN salary>20000 THEN AWHEN salary>15000 THEN BWHEN salary>10000 THEN CELSE D AS 工资级别;
以上是关于单行函数的主要内容,如果未能解决你的问题,请参考以下文章