MySQL 常用函数

目录

格式

字符函数(处理字符或字符类型)

LENGTH(str)

CHAR_LENGTH(str)

UPPER(str)和UCASE(str)

LOWER(str)和LCASE(str)

[SUBSTR(s, start,end)](#SUBSTR(s, start,end))

INSTR(str,str1)

TRIM(s)

日期函数

常用函数

ADDTIME(date,num)

ADDDATE(date,num)

DATEDIFF(date1,date2)

数学函数

常用函数

聚合函数

常用函数

举例:

if函数

if():

ifnull():

case函数

格式:

举例:

格式

SELECT 函数(表头名) FROM 库名.表名;

SELECT 函数(表头名) FROM 库名.表名 WHERE 条件;

字符函数(处理字符或字符类型)

LENGTH(str)

返字符串长度,以字节为单位(一个汉字3个字节)

复制代码
mysql> select name from tarena.user where name = "root" ;
+------+
| name |
+------+
| root |
+------+
1 row in set (0.00 sec)
mysql> select name , length(name) as 字节个数from tarena.user where name = "root" ;
+------+--------------+
| name | 字节个数      |
+------+--------------+
| root |            4 |
+------+--------------+
1 row in set (0.00 sec)

CHAR_LENGTH(str)

返回字符串长度,以字符为单位

复制代码
mysql> select name , char_length(name) from tarena.employees where employee_id = 3 ;
+-----------+-------------------+
| name      | char_length(name) |
+-----------+-------------------+
| 李玉英     |                 3 |
+-----------+-------------------+
1 row in set (0.00 sec)

UPPER(str)和UCASE(str)

将字符串中的字母全部转换成大写

复制代码
mysql> select name from  tarena.user where uid <= 3 ;
+--------+
| name   |
+--------+
| root   |
| bin    |
| daemon |
| adm    |
+--------+
4 rows in set (0.00 sec)
mysql> select upper(name) from  tarena.user where uid <= 3 ;
+-------------+
| upper(name) |
+-------------+
| ROOT        |
| BIN         |
| DAEMON      |
| ADM         |
+-------------+
4 rows in set (0.00 sec)

LOWER(str)和LCASE(str)

将str中的字母全部转换成小写

复制代码
mysql> select lower("ABCD") ;
+---------------+
| lower("ABCD") |
+---------------+
| abcd          |
+---------------+
1 row in set (0.00 sec)

SUBSTR(s, start,end)

从s的start位置开始取出到end长度的子串

复制代码
mysql> select name from  tarena.employees where employee_id <= 3 ;
+-----------+
| name      |
+-----------+
| 梁伟      |
| 郭岩      |
| 李玉英    |
+-----------+
3 rows in set (0.00 sec)
//不是输出员工的姓 只输出名字
mysql> select substr(name,2,3) from  tarena.employees where employee_id <= 3 ;
+------------------+
| substr(name,2,3) |
+------------------+
| 伟               |
| 岩               |
| 玉英             |
+------------------+
3 rows in set (0.00 sec)

INSTR(str,str1)

返回str1参数,在str参数内的位置

复制代码
mysql> select name from  tarena.user where uid <= 3 ;
+--------+
| name   |
+--------+
| root   |
| bin    |
| daemon |
| adm    |
+--------+
4 rows in set (0.00 sec)
mysql> select instr(name,"a") from  tarena.user where uid <= 3 ;
+-----------------+
| instr(name,"a") |
+-----------------+
|               0 |
|               0 |
|               2 |
|               1 |
+-----------------+
4 rows in set (0.00 sec)

TRIM(s)

返回字符串s删除了两边空格之后的字符串

复制代码
mysql> select trim("  ABC  ");
+-----------------+
| trim("  ABC  ") |
+-----------------+
| ABC             |
+-----------------+
1 row in set (0.00 sec)

日期函数

|------------------|-------------|--------------|------------|
| 函数 | 说明 | 函数 | 说明 |
| curtime() | 获取时间 | hour() | 获取小时 |
| curdate() | 获取日期 | minute() | 获取分钟 |
| now( ) | 获取日期和时间 | second() | 获取秒 |
| year() | 获取年 | quarter() | 获取一年中第几季度 |
| month() | 获取月 | monthname() | 获取月份名称 |
| day()/week() | 获取日/一年中的第几周 | dayname() | 获取日期对应的星期名 |
| date()/weekday() | 获取日期/一周中的周几 | dayofyear() | 获取一年中第几天 |
| time() | 获取时间 | dayofmonth() | 获取一月中第几天 |
[### 常用函数]

表orders:

ADDTIME(date,num)

添加时间

复制代码
mysql> select order_num,addtime(order_date,10) from orders;
+-----------+------------------------+
| order_num | addtime(order_date,10) |
+-----------+------------------------+
|     20005 | 2023-09-01 00:00:10    |
|     20006 | 2023-09-12 00:00:10    |
|     20007 | 2023-09-30 00:00:10    |
|     20008 | 2023-10-03 00:00:10    |
|     20009 | 2023-10-08 00:00:10    |
+-----------+------------------------+
5 rows in set (0.02 sec)

ADDDATE(date,num)

添加日期

复制代码
mysql> select order_num,adddate(order_date,10) from orders;
+-----------+------------------------+
| order_num | adddate(order_date,10) |
+-----------+------------------------+
|     20005 | 2023-09-11 00:00:00    |
|     20006 | 2023-09-22 00:00:00    |
|     20007 | 2023-10-10 00:00:00    |
|     20008 | 2023-10-13 00:00:00    |
|     20009 | 2023-10-18 00:00:00    |
+-----------+------------------------+
5 rows in set (0.00 sec)

DATEDIFF(date1,date2)

时间差:date1-date2

复制代码
mysql> select order_num,datediff(order_date,curdate()) as day_difference from orders;
+-----------+----------------+
| order_num | day_difference |
+-----------+----------------+
|     20005 |           -220 |
|     20006 |           -209 |
|     20007 |           -191 |
|     20008 |           -188 |
|     20009 |           -183 |
+-----------+----------------+
5 rows in set (0.01 sec)

数学函数

|----------|-----------|------------|-------------|
| 函数 | 说明 | 函数 | 说明 |
| abs() | 绝对值 | mod(x,y) | 求余x%y |
| cos() | 余弦,参数为弧度 | pi() | 圆周率 |
| floor(x) | 不大于x的最大整数 | ceiling(x) | 不小于x的最小整数 |
| sqrt() | 平方根 | ceil(x) | 不小于x的最小整数 |
| exp() | e的次方 | rand(x,n) | 四舍五入保留n位小数点 |
[### 常用函数]

聚合函数

|------------|-----------------|
| 函数 | 说明 |
| sum(表头名) | 求和 |
| avg(表头名) | 计算平均值 |
| min(表头名) | 获取最小值 |
| max(表头名) | 获取最大值 |
| count(表头名) | 统计表头值个数(包括null) |
[### 常用函数]

举例:

复制代码
mysql> select * from orderitems;
+-----------+------------+---------+----------+------------+
| order_num | order_item | prod_id | quantity | item_price |
+-----------+------------+---------+----------+------------+
|     20005 |          1 | ANV01   |       10 |       5.99 |
|     20005 |          2 | ANV02   |        3 |       9.99 |
|     20005 |          3 | TNT2    |        5 |      10.00 |
|     20005 |          4 | FB      |        1 |      10.00 |
|     20006 |          1 | JP2000  |        1 |      55.00 |
|     20007 |          1 | TNT2    |      100 |      10.00 |
|     20008 |          1 | FC      |       50 |       2.50 |
|     20009 |          1 | FB      |        1 |      10.00 |
|     20009 |          2 | OL1     |        1 |       8.99 |
|     20009 |          3 | SLING   |        1 |       4.49 |
|     20009 |          4 | ANV03   |        1 |      14.99 |
+-----------+------------+---------+----------+------------+
11 rows in set (0.00 sec)

确定售出的商品总数(使用Orderltems中的数量列)

复制代码
mysql> select sum(quantity)  from orderitems;
+---------------+
| sum(quantity) |
+---------------+
|           174 |
+---------------+
1 row in set (0.00 sec)

if函数

if(条件,v1,v2) 如果条件是TRUE则返回v1,否则返回v2

ifnull(v1,v2) 如果v1不为NULL,则返回v1,否则返回v2

if():

复制代码
mysql> select  if(1 = 2 , "a","b");
+---------------------+
| if(1 = 2 , "a","b") |
+---------------------+
| b                   |
+---------------------+
1 row in set (0.00 sec)

ifnull():

复制代码
mysql> select  ifnull("abc","xxx");
+---------------------+
| ifnull("abc","xxx") |
+---------------------+
| abc                 |
+---------------------+
1 row in set (0.00 sec)

case函数

格式:

CASE 表头名

WHEN 值1 THEN 输出结果

WHEN 值2 THEN 输出结果

WHEN 值3 THEN 输出结果

ELSE 输出结果

END

CASE

WHEN 判断条件1 THEN 输出结果

WHEN 判断条件2 THEN 输出结果

WHEN 判断条件3 THEN 输出结果

ELSE 输出结果

END

如果表头名等于某个值,则返回对应位置then后面的值并结束判断,

如果与所有值都不相等,则返回else后面的结果并结束判断

举例:

复制代码
mysql> select  * from tarena.departments;
+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|       1 | 人事部    |
|       2 | 财务部    |
|       3 | 运维部    |
|       4 | 开发部    |
|       5 | 测试部    |
|       6 | 市场部    |
|       7 | 销售部    |
|       8 | 法务部    |
+---------+-----------+
8 rows in set (0.03 sec)

输出部门类型

复制代码
mysql> select dept_id,dept_name,
    -> case
    -> when dept_name="运维部"  then "技术部"
    -> when dept_name="开发部"  then "技术部"
    -> when dept_name="测试部"  then "技术部"
    -> else "非技术部"
    -> end as 部门类型  from  tarena.departments;
+---------+-----------+--------------+
| dept_id | dept_name | 部门类型     |
+---------+-----------+--------------+
|       1 | 人事部    | 非技术部     |
|       2 | 财务部    | 非技术部     |
|       3 | 运维部    | 技术部       |
|       4 | 开发部    | 技术部       |
|       5 | 测试部    | 技术部       |
|       6 | 市场部    | 非技术部     |
|       7 | 销售部    | 非技术部     |
|       8 | 法务部    | 非技术部     |
+---------+-----------+--------------+
8 rows in set (0.00 sec)

或者

复制代码
mysql> select dept_id, dept_name,
    -> case dept_name
    -> when '运维部' then '技术部门'
    -> when '开发部' then '技术部门'
    -> when '测试部' then '技术部门'
    -> else '非技术部门'
    -> end as  部门类型   from  tarena.departments;
+---------+-----------+-----------------+
| dept_id | dept_name | 部门类型        |
+---------+-----------+-----------------+
|       1 | 人事部    | 非技术部门      |
|       2 | 财务部    | 非技术部门      |
|       3 | 运维部    | 技术部门        |
|       4 | 开发部    | 技术部门        |
|       5 | 测试部    | 技术部门        |
|       6 | 市场部    | 非技术部门      |
|       7 | 销售部    | 非技术部门      |
|       8 | 法务部    | 非技术部门      |
+---------+-----------+-----------------+
8 rows in set (0.00 sec)
相关推荐
镇潮21 小时前
Cursor 接入 mysql mcp
数据库·mysql·ai
计算机学姐1 天前
基于Python的在线考试系统【2026最新】
开发语言·vue.js·后端·python·mysql·django·flask
染指11101 天前
70.渗透-Mysql基础-创建数据库
数据库·mysql
綝~1 天前
MySQL的相关内容
数据库·mysql
思成不止于此1 天前
【MySQL 零基础入门】DQL 核心语法(一):学生表基础查询与聚合函数篇
数据库·笔记·学习·mysql
nbsaas-boot1 天前
MySQL 中如何实现类似 SQL Server SELECT INTO 的表复制能力(生产级实践指南)
数据库·mysql
独泪了无痕1 天前
COALESCE函数:处理NULL值的利器
sql·mysql·函数式编程
二营长11 天前
线上系统mysql数据库突然sql执行不出来记录
数据库·sql·mysql
翔云 OCR API1 天前
企业工商信息查验API-快速核验企业信息-营业执照文字识别接口
前端·数据库·人工智能·python·mysql
进击的丸子1 天前
人脸识别项目如何在Spring Boot项目中如何建立数据库和管理
数据库·后端·mysql