Mysql学习笔记(005)-常见函数-单行函数
单行函数
1 #进阶4:常见函数 2 /* 3 概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名 4 好处:1、隐藏了实现细节 2、提高代码的重用性 5 调用:select 函数名(实参列表) 【from 表】; 6 特点: 7 ①叫什么(函数名) 8 ②干什么(函数功能) 9 分类: 10 1、单行函数 11 如concat,length,ifnull等 12 分类:字符函数 数学函数 日期函数 其他函数【补充】 流程控制函数【补充】 13 2、分组函数 14 功能:做统计使用,又称统计函数、聚合函数、组函数 15 16 常见函数: 17 字符函数:length 18 concat 19 substr 20 instr 21 trim 22 upper 23 lower 24 lpad 25 rpad 26 replace 27 28 数学函数: 29 round 30 ceil 31 floor 32 truncate 33 mod 34 35 日期函数: 36 now 37 curdate 38 curtime 39 year 40 month 41 monthname 42 day 43 hour 44 minute 45 second 46 str_to_date 47 date_format 48 49 其他函数 50 version 51 database 52 user 53 54 控制函数 55 if 56 case 57 */ 58 59 #一、字符函数 60 #1.length 获取参数值的字节个数 61 SELECT LENGTH('john');#列名,常量 62 SELECT LENGTH('张三丰hahaha'); 63 64 SHOW VARIABLES LIKE '%char%'; 65 66 #2.concat 拼接字符串 67 SELECT CONCAT(last_name,'_',first_name) 姓名 68 FROM employees; 69 70 #3.upper,lower 71 SELECT UPPER('john'); 72 SELECT LOWER('joHn'); 73 #示例:将姓变大写,名小写,然后拼接 74 SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名 75 FROM employees; 76 77 #4.substr、subtring 78 注意:索引从1开始 79 #截取从指定索引处后面所有字符 80 SELECT SUBSTR('李莫愁爱上了陆展元',7) output; 81 82 #截取从指定索引处指定长度的字符 83 SELECT SUBSTR('李莫愁爱上了陆展元',1,3) output; 84 85 #案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来 86 SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) output 87 FROM employees; 88 89 #5.instr 返回子串第一次出现的索引,如果找不到返回0 90 SELECT INSTR('杨不悔爱上了殷六侠','殷六侠') AS out_put; 91 92 #6.trim 93 SELECT LENGTH(TRIM(' 张翠山 ')) AS ou_out; 94 SELECT TRIM('a' FROM 'aaaaaaa张aaaaa翠山aaaaaaaaaa') AS out_put; 95 96 #7.lpad用指定的字符实现左填充指定长度 97 SELECT LPAD('殷素素',2,'*') AS out_put; 98 99 #8.rpad用指定的字符实现左填充指定长度 100 SELECT RPAD('殷素素',12,'*') AS out_put; 101 102 #replace 替换 103 SELECT REPLACE('张无忌爱上周芷若了周芷若周芷若周芷若周芷若','周芷若','赵敏') AS out_put; 104 105 #二、数学函数 106 107 #round 四舍五入 108 SELECT ROUND(1.65); 109 SELECT ROUND(1.567,2); 110 111 112 #ceil 向上取整,返回>=该参数的最小值 113 SELECT CEIL(-1.02); 114 115 #floor 向下取整,返回<=该参数的最大整数 116 SELECT FLOOR(-9.99); 117 118 #truncate 截断 119 SELECT TRUNCATE(1.65,1); 120 121 #mod 取余 122 /* 123 mod(a,b); a-a/b*b 124 125 mod(-10,-3) -10-(-10)/(-3)*(-3) 126 */ 127 SELECT MOD(10,3); 128 SELECT 10%3; 129 130 #三、日期函数 131 132 #now 返回当前系统日期+时间 133 SELECT NOW(); 134 135 #curdate 返回当前系统日期,不包含时间 136 SELECT CURDATE(); 137 138 #curtimes 返回当前时间,不包含日期 139 SELECT CURTIME(); 140 141 #可以获取指定部分,年、月、日、小时、分钟、秒 142 SELECT YEAR(NOW()) 年; 143 SELECT YEAR('1998-1-1') 年; 144 145 SELECT YEAR(hire_date) 年 FROM employees; 146 147 SELECT MONTH(NOW()) 月; 148 SELECT MONTHNAME(NOW()) 月; 149 150 #str_to_date将字符通过指定的格式转换成日期 151 SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d') AS output; 152 153 #查询入职日期为1992--4-3的员工信息; 154 SELECT * FROM employees WHERE hire_date = '1992-3-4'; 155 156 SELECT * FROM employees WHERE hire_date = STR_TO_DATE('3-4 1992','%c-%d %Y'); 157 158 #date_format 将日期转换为字符 159 SELECT DATE_FORMAT(NOW(),'%y年%m月%d日'); 160 161 #查询有奖金员工的名和入职日期(xx月/xx日 xx年) 162 SELECT last_name,DATE_FORMAT(hire_date,'%m月/%d日 %y年') 入职日期 163 FROM employees 164 WHERE commission_pet IS NOT NULL; 165 166 #四、其他函数 167 168 SELECT VERSION(); 169 SELECT DATABASE(); 170 SELECT USER(); 171 172 #五、流程控制函数 173 #1.if函数: if else的效果 174 SELECT IF(10>5,'大','小'); 175 176 SELECT last_name,commission_pet,IF(commission_pet IS NULL,'没奖金,呵呵','有奖金,嘻嘻') 备注 177 FROM employees; 178 179 #2.case函数的使用一:switch case的效果 180 /* 181 java中 182 switch(变量或者表达式){ 183 case 常量1:语句1;break; 184 ... 185 default:语句n;break; 186 } 187 mysql中 188 case 要判断的字段或表达式 189 when 常量1 then 要显示的值1或语句1; 190 when 常量2 then 要显示的值2或语句2; 191 ... 192 else 要显示的值n或语句n; 193 end 194 */ 195 196 /*案例:查询员工的工资,要求 197 部门编号=30,显示的工资为1.1倍 198 部门编号=40,显示的工资为1.2倍 199 部门编号=50,显示的工资为1.3倍 200 其他部门,显示的工资为原工资 201 202 */ 203 204 SELECT salary 原始工资,department_id, 205 CASE department_id 206 WHEN 30 THEN salary*1.1 207 WHEN 40 THEN salary*1.2 208 WHEN 50 THEN salary*1.3 209 ELSE salary 210 END AS 新工资 211 FROM employees; 212 213 #3.case 函数的使用二,类似于多重if 214 /* 215 java中: 216 if(条件1){ 217 语句1; 218 }else if(条件2){ 219 语句2; 220 } 221 ... 222 else{ 223 语句n; 224 } 225 mysql中: 226 case 227 when 条件1 then 要显示的值1或语句1; 228 when 条件2 then 要显示的值2或语句2; 229 ... 230 else 要显示的值n或语句n 231 end 232 */ 233 234 #案例:查询员工的工资的情况 235 如果工资>20000,显示A级别 236 如果工资>15000,显示B级别 237 如果工资>10000,显示c级别 238 否则,显示D级别 239 SELECT salary, 240 CASE 241 WHEN salary>20000 THEN A 242 WHEN salary>15000 THEN B 243 WHEN salary>10000 THEN C 244 ELSE D AS 工资级别;
练习
1 #1. 显示系统时间(备注日期时间) 2 SELECT NOW() 3 4 #2. 查询员工工号,姓名,工资以及工资提高百分之20%后的结果(new salary) 5 SELECT employee_id,last_name,salary,salary*(1+20%) 6 FROM employees 7 8 #3. 将员工姓名按首字母排序,并写出姓名的长度(length) 9 SELECT LENGTH(last_name) 长度,SUBSTR(last_name,1,1) 首字符,last_name 10 FROM employees 11 ORDER BY 首字符; 12 13 #4. 做一个查询,产生下面的结果 14 <last_name> earns <salary> monthly but wants <salary*3> 15 Dream Salary 16 King earns 24000 monthly but wants 72000 17 18 SELECT CONCAT(last_name,'earns',salary,' monthly but wants ',salary*3) AS "Dream salary" 19 FROM employees; 20 21 #5.使用case——when,按照下面的条件; 22 job grade 23 AD_PRES A 24 ST_MAN B 25 IT_PROG C 26 SA_REP D 27 ST_CLERK E 28 29 SELECT last_name,job_id AS job, 30 CASE job_id 31 WHEN 'AD_PRES' THEN 'A' 32 WHEN 'ST_MAN' THEN 'B' 33 WHEN 'IT_PROG' THEN 'C' 34 WHEN 'SA_REP' THEN 'D' 35 WHEN 'ST_CLERK' THEN 'E' 36 END AS Grades 37 FROM employees 38 WHERE job_id='AD_PRES'
小结

浙公网安备 33010602011771号