常见函数

概念:
类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。优点隐藏了实现细节;提高代码的重用性。

调用:

select 函数名(实参列表) [FROM 表]

特点:叫什么(函数名),干什么(函数功能)

分类:
1、单行函数:
字符函数,数学函数,日期函数,其他函数,控制函数。
2、分组函数:
功能:做统计使用,又称为统计函数、聚合函数、组函数。

字符函数:

1、length:获取参数值的字节个数。length:n.长度; 篇幅; 时间的长短; 有…长度的; 一节; 池长; 艇位; 马位

查看张三丰hahaha的长度
SELECT LENGTH('张三丰hahaha');//15(utf-8汉字占3个字节,字母占1个字节;GBK汉字占2个字节)

2、concat:拼接字符串。concatenate:vt.把 (一系列事件、事情等)联系起来;adj.连接的,联系在一起的

用_拼接员工的姓和名
SELECT CONCAT (last_name,'_',first_name) FROM employees;

将姓变大写,名变小写然后拼接

SELECT CONCAT (UPPER(last_name),'_',LOWER(first_name)) AS 姓名 FROM employees;

姓名中首字母大写,其他字符小写然后用_拼接起来

SELECT CONCAT (UPPER(CONCAT(last_name,1,1)),'_',LOWER(CONCAT(first_name,2))) AS 姓名 FROM employees;

3、upper:字母 小写变大写。upper:adj.较高的,上面的; 上部的;n.鞋帮,靴面; 兴奋剂

SELECT UPPER('john');//JOHN

4、lower:字母 大写变小写。lower:adj.下方的; 底部的; 朝海岸的; 向南的; 较小的; 较低级的v.降低; 减少

SELECT LOWER('JOHN');//john

5、substr/substring:截取,索引从1开始。substring:n.

子链
I、截取从指定索引处后面所有字符
SELECT SUBSTR('李莫愁爱上了陆展元',7);//陆展元
II、截取从指定索引处指定字符长度的字符
SELECT SUBSTR('李莫愁爱上了陆展元',1,3);//李莫愁

6、instr:返回字符串第一次出现的索引,如果找不到则返回0.

SELECT INSTR ('杨不悔爱上了殷六侠','殷六侠');

7、trim:去掉前后指定字符串。trim:vt.修剪; 整理; 装饰adj.整齐的,整洁的; 修长的; 苗条的n.整齐; 修剪; 健康状态; 装束vi.削减

SELECT TRIM('a' FROM 'aaaaa张aa翠aaaa山aaaa');//张aa翠aaaa山
SELECT TRIM('aa' FROM 'aaaaa张aa翠aaaa山aaaa');//a张aa翠aaaa山

8、lpad:用指定的字符实现左填充指定长度长度不够则截断。pad:vt.给…装衬垫, 加垫子; 填塞; 踏平vi.步行,放轻脚步走n.垫,衬垫; 护具; 便签本; 发射台

SELECT LPAD('殷素素',6,'');//*殷素素
SELECT LPAD('殷素素',2,'
');//殷素

9、rpad:用指定的字符实现右填充指定长度,,长度不够则截断

SELECT RPAD('殷素素',6,'');//殷素素**

10、replace:替换

SELECT REPLACE ('周芷若周芷若爱上了张无忌','周芷若','赵敏');//赵敏赵敏爱上了张无忌

数学函数

1、round :四色五入。round:adj.圆/球/环/弧形的; 整数的adv.(在)周围; 围绕; 到处; 转过来; 绕弯; 依次; 到某地; 大概prep.围(绕); 绕过; 遍及; 基于; 克服; 大概n.轮,局,回合; 惯常活动; 递送路线; 一巡饮料; 一阵; 一枪; 圆块v.绕过; 变圆; 四舍五入

SELECT ROUND(-1.55);//-2
SELECT ROUND(-1.567,2);//-1.57

2、ceil向上取整,返回>=改参数的最小整数。ceil :vt.装天花板,装船内格子板

SELECT CEIL(1.002);//2
SELECT CEIL(-1.002);//-1

3、floor向下取整,返回<=改参数的最小整数。floor:n.地面,地板; 楼层; 底部; 议员席vt.铺地板; 击败,打倒

SELECT FLOOR(1.002);//1
SELECT FLOOR(-1.002);//-2

4、truncate :截断。truncate:vt.缩短

SELECT TRUNCATE(1.699,1);//1.6

5、mod :取余 ,符号正反被除数有关。mod:n.摩登派; 现代派分子abbr.现代的(等于modern); 修改(等于moderate); 模数,绝对值(等于modulus)

  mod(a,b):a-a/b*b
  mod(-10,-3):-10-(-10)/(-3)*(-3)=-10-3*(-3)=-10+9=-1

SELECT MOD(10,3);//1
SELECT MOD(10,-3);//1
SELECT MOD(-10,3);//-1
SELECT MOD(-10,-3);//-1

日期函数

1、now:返回当前系统日期+时间

SELECT NOW();//2024-04-06 19:30:00

2、curdate:返回当前系统日期,不包含时间。current:adj.当前的; 流通的n.(河、湖或海的)水流; 电流; 趋向

SELECT CURDATE();//2024-04-06

3、curtime:返回当前时间,不包含日期

SELECT CURTIME();//19:30:00

4、获取指定的部分,年、月、日day、小时hour、分钟minute、秒second

SELECT YEAR(NOW()) 年;
SELECT MONTH((NOW()) 月;//4
SELECT MONTHNAME((NOW()) 英文月;//April

5、str_to_date:将日期格式的字符 转换成 指定格式的日期

SELECT STR_TO_DATE('9-13-1999','%m-%d-%Y);//1999-09-13
SELECT STR_TO_DATE('13-1999 9','%d-%Y %m);//1999-09-13

6、date_format: 将日期 转换成 字符。format:n.(出版物的)版式; [自](数据安排的)形式; 电视节目的总安排(或计划)vt.使格式化; 安排…的格局; 设计…的版面vi.设计一个版式

SELECT DATE_FORMAT(NOW(),'%y年%m月%d日');//24年04月06日
查询有奖金的员工名和入职日期(xx月/xx日 xx年)
SELECT last_name,DATE_FORMAT(hiredate,'%m月/%d日 %y年) 入职日期 FROM employees where commission_pct is not null;

其他函数

SELECT VERSION();//查看版本号VERSION:n.变体,版本; (从不同角度的)描述,说法; 改编形式
SELECT DATEBASE();//查看当前数据库
SELECT USER():查看当前用户

查看客服端字符集(character_set_Client)。character:n.性格,特点; 特色; 勇气,毅力; 声望; 人物,角色,人; 字符,文字,字母。client:n.客户; 委托人; 〈计〉客户机

SHOW VARIABLES LIKE '%char%';

流程控制函数

1、if函数: if else的效果

SELECT IF(10<5,'大','小');//小

2、case函数

I、switch case效果(等值判断)
   java中:switch(变量或表达式){
          case 常量1:语句1;break;
          ...
          default:语句n;break;
    }
    mysql中:case 要判断的字段或表达式
            when 常量1 then 要显示的值1或语句1;
            ...
            else 要显示的值n或语句n;
            end

  查询员工的工资,要求 部门号为30,显示工资为1.1倍;部门号为40,1.2倍;部门号为50,1.3倍;其他部门则为原工资
  SELECT salary 原始工资,department_id,
 CASE department_id
 WHEN 30 THEN salary*1.1
 WHEN 40 THEN salary*1.2
 WHEN 50 THEN salary*1.3
 ELSE salary 
 END AS 新工资
  FROM employees;

2、类似于 多重if
  java中:if(条件1){
              语句1;
          }else if(条件2){
                  语句2;
                  }
            ...
              else{
                语句n;
                }
  mysql中:case
         when 条件1 then 要显示的值1或语句1
         ...
         else 要显示的值n或语句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 AS 工资级别
FROM employees;
 posted on 2024-04-06 20:01  皮蛋是个小邋遢  阅读(9)  评论(0编辑  收藏  举报