MySQL 常用函数

目录

格式

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

LENGTH(str)  

CHAR_LENGTH(str) 

UPPER(str)和UCASE(str)  

LOWER(str)和LCASE(str) 

 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)

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值