单行函数

字符函数

长度:length

获取参数的字节个数

UTF-8:汉字三字节

GBK:汉字两字节

SELECT LENGTH("柒拾柒Web"); 返回12

image-20220906133222013

拼接:concat

拼接字符串

SELECT CONCAT("2","_","33"); 返回"2_33"

image-20220906133044691

大小写:upper|lower

前者变大写,后者小写

SELECT UPPER("webgray"); 返回"WEBGRAY"

image-20220906133115979

裁剪:substr

裁剪字符串,字符串首个索引从 1 开始

(str,索引起始)

(str,索引起始,步长)

SELECT SUBSTR("阿珍爱上了阿强",3,3); 返回"爱上了"

image-20220906132831887

索引instr

查找第一次起始索引,无则返回 0

(源数据,查找值)

select instr(13145556,4);

select instr("阿珍爱上了阿强","爱");

image-20220910180046408

去空:trim

默认去前后空格,可指定内容

(元数据)

(指定内容 FROM 源数据)

select trim(" 阿珍 ");

select trim("-" FROM "------阿珍---");

select trim(1 FROM 11122211);

image-20220910180915821

填充:lpad|rpad

左右填充补齐

(源数据,长度,填充内容)

SELECT LPAD("阿强",10,"珍");

image-20220910181429553

替换:replace

替换

(源数据,旧数据,新数据)

SELECT REPLACE("111靓仔111",1,"");

image-20220910181931977

字符例题

  • 查询员工姓名,工资,以及工资提高20%的结果 SELECT e_name , e_salary , e_salary*1.2 "new salary" FROM employees;
  • 将员工的姓名以首字母排序,并写出姓名长度 SELECT LENGTH(e_name) 长度, SUBSTR(e_name,1,1) 首字符, e_name FROM employees;

数学函数

四舍五入:round

四舍五入

(源数据,保留小数点位数)

select round(3.1415926535 , 7);

image-20220910182611602

取整:ceil|floor

向上向下取整

image-20220910182951528

小数:truncate

截断小数

(数据,截断位数)

图片[11] | Web Stack | 常用函数 | 一个栈

取余:mod

取余: a-a/b*b

(被除数,除数)

日期函数

now

当前sql语句的 日期+时间

例如: 2022-09-10 17:29:54

image-20220911020246182

sysdate

当前函数的耗时 日期+时间

(时间精度参数 0~6)

例如: 2022-09-10 17:29:54

image-20220911020436528

curdate

日期

例如: 2022-09-10

curtime

时间

例如: 17:29:54

时间比较

时间输入合法即可比较

image-20220911021743271

DATE_FORMAT

将数据库中的date数据格式化为String类型(常用)

(date,format)

image-20220911022356110
image-20220911022529897

STR_TO_DATE

将指定的时间格式的字符串按照格式转换为 DATETIME 类型的值。str要与format的格式保持一致,否则会报错。

(string,format)

image-20220911023206882

流程控制

如果:if

类似三元运算符,只能if else

(条件 , 成立 , 不成立)

image-20220911024334274

选择:case

类似 switch case

语境一: 处理等值 当switch case

CASE 条件 WHEN 常量1 THEN 语句 .... END

语境二: 处理区间 当多重if

CASE WHEN 条件1 THEN 语句 .... END

image-20220911030612004
image-20220911032155803

其它函数

常量

SELECT 100;

SELECT 'Web Gray';

运算表达式

SELECT 3*4;

版本

SELECT VERSION();

取别名

便于理解 便于区分重复字段

SELECT first_name FORM user AS 姓名;

SELECT first_name 姓名,gender "性 别" FROM user;

去重

SELECT DISTINCT class_id from user;

加号

SELECT '123'+4; 若强转成功作加法,失败为零

SELECT null+4; 有null为null

判断Null

IFNULL 函数判断赋予默认值

SELECT IFNULL(class_id,1903) AS 班级,student_id FROM student;

转义

默认脏转义符为 '\' 可通过 ESCAPE 自定义

SELECT name_id FROM user WHERE full_name LIKE '$_柒%' ESCAPE '$'; 转义符变为'$'

分组聚合函数

简单使用

SELECT SUM(salary) 求和, AVG(salary) 平均, MAX(salary) 最高, MIN(salary) 最低, COUNT(DISTINCT salary) 个数 FROM employees;

参数支持

  • SUM , AVG
    • 数值类型
  • MAX , MIN , COUNT
    • 任何类型
  • 都忽略 null
  • 都支持 DISTINCT 去重

分组函数详情

count

  • 统计行数 :
    • SELECT COUNT(*) FROM table_name;
    • SELECT COUNT(1) FORM table_name;
    • SELECT COUNT(字段名) FROM table_name;
  • 统计效率 :
    • MYISAM 存储引擎下 , COUNT(*)最优, 引擎有对应计数器.
    • INNODB 存储引擎下 , COUNT(*)|COUNT(1) 都差不多. 比 COUNT(字段名) 效率高.

group by

位于语句末尾,因为分组函数查询的值为一行,协同查询的字段是 group by 后的字段

例: 查找男女同学中各自的最大年龄 SELECT MIN(brithday),gender FROM student_test GROUP BY gender;

having

能分组前筛选就尽量用,相比having性能差

分组后筛选时使用,位于 group by 语句末尾,筛选的数据源是分组.

分组案例

例: 查找男女同学中各自的最大年龄 SELECT MIN(brithday),gender FROM student_test GROUP BY gender;

image-20220915000010612

例: 查找姓"唐"男女同学中各自的最大年龄 SELECT MIN(brithday),gender FROM student_test WHERE student_name LIKE "唐%" GROUP BY gender;

image-20220915000514697

例: 统计名字字数大于1的其余各字数的人数 SELECT COUNT(*) 人数,LENGTH(student_name) 名字长度 FROM student_test GROUP BY LENGTH(student_name) HAVING 名字长度 > 3;

image-20220915002855108
image-20220915000712874
image-20220915001021203
image-20220915003120014
© 版权声明
箴言区 抢沙发
头像
达瓦里希请发言...
提交
头像

昵称

取消
昵称表情代码图片