lyt经典版MySQL基础——进阶4:常见函数-单行函数

  1 #进阶4:常见函数
  2 /*
  3 概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
  4 好处:1、隐藏了实现细节 2、提高代码的重用性
  5 调用:select 函数名(实参列表) 【from 表】;
  6 特点:
  7     (1)叫什么(函数名)
  8     (2)干什么(函数功能)
  9 分类:
 10     1、单行函数
 11     如concat、length、ifnull等
 12     2、分组函数
 13     
 14     功能:做统计使用,又称为统计函数、聚合函数、组函数
 15     
 16 常见函数:
 17     一、单行函数
 18     字符函数:
 19     length
     char_length
20 concat 21 substr 22 instr 23 trim 24 upper 25 lower 26 lpad 27 rpad 28 replace
     strcmp
     left/right
29 30 数学函数:
     abs
31 round 32 ceil 33 floor 34 truncate 35 mod 36 rand:获取随机数,返回0~1之间的小数 37 38 日期函数: 39 now 40 curdate 41 curtime 42 year 43 month 44 monthname 45 day 46 hour 47 minute 48 second 49 str_to_date 50 date_format 51 52 其他函数: 53 version 54 database 55 user 56 password('字符'):返回该字符的密码形式 57 md5('字符'):返回该字符的md5加密形式 58 59 控制函数 60 if 61 case 62 */ 63 #一、字符函数 64 #1.length 获取参数值的字节个数 65 SELECT LENGTH('john'); -- 9 66 SELECT LENGTH('张三丰hahaha'); -- 15
   SELECT LENGTH('hello,郭襄'); -- 12
67 68 SHOW VARIABLES LIKE '%char%';

      #1.2 char_length获取字符个数
      SELECT CHAR_LENGTH('hello,郭襄'); -- 8
 69 
 70 #2.concat 拼接字符串
 71 SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;
 72 
 73 #3.upperlower
 74 SELECT UPPER('john');
 75 SELECT LOWER('joHn');
 76 #示例:将姓变大写,名变小写,然后拼接
 77 SELECT CONCAT(UPPER(last_name),LOWER(first_name)) FROM employees;
 78 
 79 #4.substr、substring
 80 #注意:索引从1开始
 81 #截取从指定索引处后面所有字符
 82 SELECT SUBSTR('李莫愁爱上了陆展元',7) out_put;
 83 #截取从指定索引处 指定字符长度的字符
 84 SELECT SUBSTR('李莫愁爱上了陆展元',1,3) out_put;
 85 #案例:姓名中首字符大写,其他字符小写,然后用_拼接,显示出来
 86 SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) '姓名' 
 87 FROM employees;
 88 
 89 #5.instr 返回子串第一次出现的索引,如果找不到返回0
 90 SELECT INSTR('杨不殷六侠悔爱上了殷六侠','殷ba侠') AS out_put;
 91 
 92 #6.trim 去掉左右两边的空格(不包括tab)
 93 SELECT LENGTH(TRIM('  张翠山  ')) AS out_put;
 94 
 95 SELECT TRIM('a' FROM'aaaaaaaaa张aaaaaaaa翠山aaaaaaaaaaaaaaaaaaa') AS out_put;
 96 
 97 #7.lpad 用指定的字符实现左填充指定长度
 98 SELECT LPAD('殷素素',10,'*') AS out_put; -- *******殷素素
 99 SELECT LPAD('殷素素',2,'*') AS out_put; -- 殷素
100 
101 #8.rpad 用指定的字符实现右填充指定长度
102 SELECT RPAD('殷素素',12,'ab') AS out_put; -- 殷素素ababababa
103 
104 #9.replace 替换
105 SELECT REPLACE('周芷若周芷若周芷若周芷若张无忌爱上了周芷若','周芷若','赵敏') AS out_put;
106 -- 赵敏赵敏赵敏赵敏张无忌爱上了赵敏
107 
   #10.STRCMP 比较两个字符大小
   SELECT STRCMP('abc','aaa'); -- 1
   SELECT STRCMP('abc','aec'); -- -1
   SELECT STRCMP('abc','abc'); -- 0
 
   #11.LEFT/RIGHT 截取子串
   SELECT LEFT('鸠摩智',1); -- 鸠
   SELECT RIGHT('鸠摩智',2); -- 摩智
 
108 #二、数学函数
  
  #abs 绝对值
  SELECT ABS(-2.4); -- 2.4
109 #round 四舍五入
110 SELECT ROUND(1.65); -- 2
111 SELECT ROUND(-1.45); -- -1
112 SELECT ROUND(-1.55); -- -2
113 SELECT ROUND(1.567,2); -- 1.57
114 
115 #ceil 向上取整,返回>=该参数的最小整数
116 SELECT CEIL(1.52); -- 2
117 SELECT CEIL(1.00); -- 1
118 SELECT CEIL(-1.02); -- -1
119 
120 #floor 向下取整,返回<=该参数的最大整数
121 SELECT FLOOR(-9.99); -- -10
122 
123 #truncate 截断
124 SELECT TRUNCATE(1.65,1); -- 1.6
125 
126 #mod 取余
127 /*
128 mod(a,b): a-a/b*b
129 符号跟着被除数
130 mod(-10,-3): -10-(-10)/(-3)*(-3) = -1
131 */
132 SELECT MOD(10,3); -- 1
133 SELECT 10%3;
134 SELECT MOD(10,-3); -- 1
    SELECT MOD(10,3);  -- 1
    SELECT MOD(-10,3); -- -1
    SELECT MOD(10,-3); -- 1
    SELECT MOD(-10,-3); -- -1
135 
136 #三、日期函数
137 SELECT NOW();
138 
139 #curdate 返回当前系统日期,不包含时间
140 SELECT CURDATE();
141 
142 #curtime 返回当前时间,不包含日期
143 SELECT CURTIME();
144 
145 #可以获取指定的部分,年、月、日、小时、分钟、秒
146 SELECT YEAR(NOW()) 年;
147 SELECT YEAR('1989-1-1') 年;  -- 1989
148 
149 SELECT YEAR(hiredate) 年 FROM employees;
150 
151 SELECT MONTH(NOW()) 月; -- 7
152 SELECT MONTHNAME(NOW()) 月; -- July
153 
154 #str_to_date 将字符通过指定的格式转换成日期
155 SELECT STR_TO_DATE('1998-3-2','%Y-%c-%d  %H%i%s') AS output;
156 #查询入职日期为1992-4-3的员工信息
157 SELECT * FROM employees WHERE hiredate='1992-4-3';
158 
159 SELECT * FROM employees WHERE hiredate=STR_TO_DATE('4-3 1992','%c-%d %Y');
160 
161 #date_format 将日期转换成字符
162 SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS output;
163 #查询有奖金的员工名和入职日期(xx月/xx日 xx年)
164 SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年') AS '入职日期'
165 FROM employees WHERE commission_pct IS NOT NULL;
166 
167 #四、其他函数
168 SELECT VERSION(); -- 8.0.20 
169 
170 SELECT DATABASE(); -- myemployees 
171 
172 SELECT USER();  -- root@localhost
173 
174 #五、流程控制函数
175 #1.if函数:if else 的效果
176 SELECT IF(10>5,'','');
177 
178 SELECT last_name,commission_pct,IF(commission_pct IS NOT NULL,
179 '有奖金,嘻嘻','没奖金,呵呵') 备注 FROM employees;
180 
181 #2.case函数的使用一:switch case的效果
182 /*
183 switch(变量或表达式){
184     case 常量1:语句1;break;
185     ...
186     default:语句n;break;
187 }
188 
189 mysql中
190 case 要判断的字段或表达式
191 when 常量1 then 要显示的值1或语句1;
192 when 常量2 then 要显示的值2或语句2;
193 ...
194 else 要显示的值n或语句n;
195 end
196 */
197 
198 /*案例:查询员工的工资,要求
199 部门号=30,显示的工资为1.1倍
200 部门号=40,显示的工资为1.2倍
201 部门号=50,显示的工资为1.3倍
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
211 AS 新工资
212 FROM employees;
213 
214 #3.case函数的使用二:类似于 多重if
215 /*
216 java中:
217 if(条件1){
218     语句1;
219 }else if(条件2){
220     语句2;
221 }else{
222     语句n;
223 }
224 
225 mysql中:
226 
227 case
228 when 条件1 then 要显示的值1或语句1
229 when 条件2 then 要显示的值2或语句2
230 ...
231 else 要显示的值n或语句n
232 end
233 */
234 
235 #案例:查询员工的工资的情况
236 /*
237 如果工资>20000,显示A级别
238 如果工资>15000,显示B级别
239 如果工资>10000,显示C级别
240 否则,显示D级别
241 */
242 
243 SELECT salary,
244 CASE
245 WHEN salary>20000 THEN 'A'
246 WHEN salary>15000 THEN 'B'
247 WHEN salary>10000 THEN 'C'
248 ELSE 'D'
249 END
250 AS '工资级别' FROM employees;
原文地址:https://www.cnblogs.com/yanwuliu/p/13373414.html