• 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;
  • 相关阅读:
    mysql 位操作支持
    统计代码行数
    git merge的参数--squash的用处
    bash和zsh切换
    nginx 添加https支持
    查看Memcache运行状况
    unkown host mac 解决
    react-redux中的重要API解析
    js 同步延时调用
    从输入 URL 到浏览器渲染完成
  • 原文地址:https://www.cnblogs.com/yanwuliu/p/13373414.html
Copyright © 2020-2023  润新知