zoukankan      html  css  js  c++  java
  • MySQL数据库:第五章:常见函数

    回退至Mysql数据库理论与实战
    #进阶4:常见函数

    函数:类似于java中的”方法“,将完成某个功能的一系列步骤封装起来,对外暴露一个名字,供外界调用
    当我们学习别人定义好的方法(函数),只需要关心两件事:
    ①叫什么(函数名)
    ②干什么(函数功能)
    sql中的函数:肯定有,并且仅有一个返回值
    调用语法:
    select 函数名(实参列表);
    一、数学函数:
    abs绝对值
    mod取余
    floor向下取整
    truncate 截断
    ceil向上取整
    round四舍五入
    注意:
    sql中的round支持两个重载,规则:先按绝对值四舍五入,然后再添加正负
    round(x):只保留整数部位
    round(x,d):保留小数点后一位
    java中Math.round只支持一个参数,规则:Math.round(x)等价于Math.floor(x+0.5)
    Math.round(x)
    rand随机数
    二、字符函数
    upper转换成大写
    lower转换成小写
    length获取字节长度
    char_length获取字符长度
    substr截取子串
    trim去掉前后空格或字符
    concat拼接
    strcmp比较两个字符串
    instr获取子串第一次出现的索引,如果找不到,返回0
    注意:sql中起始索引,一般从1开始!
    三、日期函数
    now当前日期+时间
    curdate当前日期
    curtime当前时间
    datediff两个日期天数差
    date_format日期——>字符
    str_to_date字符——>日期
    四、流程控制函数
    1、if函数
    2、case结构
    形式1:类似于switch
    形式2:类似于多重if

    #一、数学函数
    #abs绝对值
    SELECT ABS(-1.5);
    #floor 向下取整,返回<=该参数的最大整数
    SELECT FLOOR(-1.5);
    #ceil 向上取整,返回>=该参数的最小整数
    SELECT CEIL(-1.5);
    #round 四舍五入
    SELECT ROUND(-1.56);
    SELECT ROUND(-1.56,1);
    #truncate 截断
    SELECT TRUNCATE(1.67,1);
    #rand随机数 0——1之间的小数[0,1)
    SELECT RAND();
    #mod取余
    SELECT MOD(10,3);
    SELECT 10%3;
    #二、字符函数
    #length字节长度
    SELECT LENGTH(‘john你好’);
    #char_length字符长度
    SELECT CHAR_LENGTH(‘john你好’);
    #upper转大写
    SELECT UPPER(last_name) FROM employees;
    #lower转小写
    SELECT LOWER(last_name) FROM employees;
    #concat拼接
    SELECT CONCAT(first_name,last_name) FROM employees;
    #substr截取子串

    注意:起始索引从1开始
    包含起始索引
    substr(str,起始索引,截取字符的长度):截取从起始索引(包含)开始,指定长度的子串
    substr(str,起始索引):截取从起始索引开始,一直到后面所有的子串

    SELECT SUBSTR(‘hello,郭襄爱上了杨过’,1,5);
    SELECT SUBSTR(‘hello,郭襄爱上了杨过’,12,2);
    SELECT SUBSTR(‘hello,郭襄爱上了杨过’,12);
    #练习:查询员工的姓名,其中姓首字符大写,其他字符小写。
    #名前两个字符大写,去其他字符小写,中间用.拼接,最终起别名 :姓名
    SELECT UPPER(SUBSTR(last_name,1,2))
    SELECT LOWER(SUBSTR(last_name,3))
    SELECT CONCAT(UPPER(SUBSTR(first_name,1,1)),LOWER(SUBSTR(first_name,2)),’.’,UPPER(SUBSTR(last_name,1,2)),LOWER(SUBSTR(last_name,3))) 姓名
    FROM employees;
    #instr

    类似于java中indexOf
    功能:获取子串第一次出现的索引,如果找不到,返回0!

    SELECT INSTR(‘郭襄张三丰郭襄爱上了郭襄’,‘郭小襄’);
    #trim

    trim(【substr from 】str):去掉str前后的指定的子串。如果substr from省略,默认去掉空格

    SELECT TRIM('哈' FROM '哈哈哈哈he哈llo张 三 丰哈哈哈哈') AS 备注;
    #strcmp
    

    功能:比较两个字符串大小,
    如果前者比后者大,则返回1,
    如果前者比后者小,则返回-1
    如果相等,则返回0

    SELECT STRCMP('hillo','hillo');
    

    #三、日期函数

    #获取当前日期+时间
    SELECT NOW();
    #只获取当前日期,不包含时间
    SELECT CURDATE();
    #只获取当前时间,不包含日期
    SELECT CURTIME();
    #获取两个日期之差(前面-后面的天数差)
    SELECT DATEDIFF('2018-8-18','2018-8-9');
    #将日期转换成指定格式的字符串
    SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s %W') 日期;
    #将字符串解析成日期
    SELECT STR_TO_DATE('2018-10-19 10:40:09 Friday','%Y-%m-%d %H:%i:%s %W') 日期;
    #案例:将入职日期早于'09-09/2000'的员工信息
    SELECT * FROM employees WHERE hiredate<STR_TO_DATE('09-09/2000','%m-%d/%Y');
    

    #四、流程控制函数
    #1、if函数
    类似于java的三元运算符。
    参数1:条件
    参数2:条件成立,返回的值
    参数3:条件不成立,返回的值

    SELECT IF(LENGTH(last_name)>LENGTH(first_name),'名大','姓大') 备注,
    last_name,
    first_name
    FROM employees;
    

    #2、case结构
    回顾java的switch case语句
    switch(判断的变量){
    case 常量值1:语句1;break;
    case 常量值2:语句1;break;
    case 常量值3:语句1;break;

    default:语句n;break
    }
    特点:做等值判断

    语法1:类似于switch case,实现等值判断
    case 判断的字段或表达式
    when 值1 then 显示的值1
    when 值2 then 显示的值2

    【else 显示的值n】
    end

    #案例:显示不同职位的新工资。AD_VP 3倍  IT_PROG 4倍 FI_MGR 5倍
    SELECT salary 原工资,job_id 职位,
    CASE job_id
    WHEN 'AD_VP' THEN SALARY*3
    WHEN 'IT_PROG' THEN SALARY*4
    WHEN 'FI_MGR' THEN SALARY*5
    #ELSE SALARY
    END  新工资
    FROM employees;
    

    语法2:类似于多重if的效果,实现区间判断
    case
    when 条件1 then 显示的值1
    when 条件2 then 显示的值2

    【else 显示的值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'
    END 级别
    FROM employees;
    

    #1. 显示系统时间(注:日期+时间)
    SELECT NOW();
    #2. 查询员工号,姓名,工资,以及工资提高百分之 20%后的结果(new salary)
    SELECT employee_id,last_name,salary,salary1.2 ‘new salary’
    FROM employees;
    #3. 将员工的姓名按首字母排序,并写出姓名的长度(length)
    SELECT last_name,LENGTH(last_name) 长度
    FROM employees
    ORDER BY SUBSTR(last_name,1,1);
    #4. 做一个查询,产生下面的结果
    <last_name> earns 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) 'Dream Salary'
    FROM employees
    WHERE salary=24000;
    

    #5. 使用 case-when,按照下面的条件:
    job                      grade
    AD_PRES            A
    ST_MAN              B
    IT_PROG             C
    SA_REP               D
    ST_CLERK           E
    产生下面的结果
    Last_name    Job_id       Grade
    king               AD_PRES       A

    SELECT last_name,job_id,
    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 Grade
    FROM employees
    WHERE last_name = 'k_ing';
    
  • 相关阅读:
    Kubernetes1.91(K8s)安装部署过程(一)--证书安装
    开源仓库Harbor搭建及配置过程
    有关centos7 图形化root用户登录
    linux服务器查看tcp链接shell
    django表格form无法保存评论排查步骤
    Redis 4.x 安装及 发布/订阅实践和数据持久化设置
    django博客项目-设置django为中文语言
    windows 环境下如何使用virtualenv python环境管理工具
    【转载】python中利用smtplib发送邮件的3中方式 普通/ssl/tls
    php安装phpize工具
  • 原文地址:https://www.cnblogs.com/javawxid/p/12812124.html
Copyright © 2011-2022 走看看