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)
相关推荐
这个DBA有点耶6 小时前
从症状到根因:数据库监控指标的分层方法与静态/动态阈值策略
数据库·mysql·代码规范
ProcessOn8 小时前
纯干货!MySql实战02:一条SQL更新语句执行流程大探索!
sql·mysql·sql server
这个DBA有点耶8 小时前
DELETE没删多少数据,表却越来越大——InnoDB删除空洞与页合并失效的根因
数据库·mysql·代码规范
小羊没烦恼!12 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
geovindu13 小时前
sql: JSON and XML Data Handling in SQL using mysql 9.0
数据库·sql·mysql·数据库开发
Mortalbreeze13 小时前
MySQL 基础篇(九):从 B+ 树到索引优化,全面理解 MySQL 索引
数据库·mysql
猫咪很可爱13 小时前
mysqldump 失败常见场景
数据库·sql·mysql
1024奇点13 小时前
【仓颉语言入门 · 第二篇 第 8 课】
开发语言·数据库·ide·mysql·开源
ggaofeng14 小时前
linux中的绿色版内存mysql
linux·运维·mysql
雨落在了我的手上14 小时前
MySQL数据库基础(14):JDBC编程
数据库·mysql