目录
[SUBSTR(s, start,end)](#SUBSTR(s, start,end))
格式
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)