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'

 

小结

posted @ 2020-01-06 16:29  klandehu  阅读(305)  评论(0)    收藏  举报