MySQL的函数

概念:
MySQL中没了提高代码的重用性和隐藏实现细节,MySQL提供了很多函数。函数可以理解为别人封装号的模板代码

分类:

  • 聚合函数
  • 数学函数
  • 字符串函数
  • 日期函数
  • 控制流函数
  • 窗口函数

聚合函数

概念:
在MySQL中,聚合函数主要由:count,sum,min,max,avg,这些聚合函数在之前都讲过,不在过多重复。这里主要学习group_concat()。
group_concat()函数首先根据group by指定的列进行分组,并且用分隔符分隔,将同一个分组中的值连接起来,返回一个字符串结果

方法:
group concat ([distinct ] 字段名[order by 排序字段 asc/desc ] [ separator '分隔符 '])

注:

  1. 使用distinct可以排除重复值
  2. 如果需要对结果中的值进行排序,可以使用order by子句
  3. separator 是一个字符串值,默认为逗号
    例如:
CREATE TABLE emp(
emp_id INT PRIMARY KEY auto_increment comment '编号',
emp_name CHAR(20) NOT NULL DEFAULT '' COMMENT '姓名',
salary DECIMAL(10,2) NOT NULL DEFAULT 0 COMMENT '工资',
department CHAR(20) NOT NULL DEFAULT '' COMMENT '部门'
);

INSERT INTO emp(emp_name,salary,department) VALUES('张晶晶',5000,'财务部'),
('王飞飞', 5800.00, '财务部'),( '赵刚', 6200.00, '财务部'),
( '刘小贝', 5700.00, '人事部'),( '王大鹏', 6700.00, '人事部'),
( '张小斐', 5200.00, '人事部'),( '刘云云', 7500.00, '销售部'),
( '刘云鹏', 7200.00, '销售部'),( '刘云鹏', 7800.00, '销售部');

-- 将所有员工的名字合并成一行
SELECT GROUP_CONCAT(emp_name) FROM emp;

-- 指定分隔符合并
SELECT GROUP_CONCAT(emp_name SEPARATOR ';') FROM emp;


-- 指定排序方式和分隔符
SELECT department,GROUP_CONCAT(emp_name SEPARATOR ';')FROM emp GROUP BY department;
SELECT department,GROUP_CONCAT(emp_name ORDER BY salary DESC SEPARATOR ';')FROM emp GROUP BY department;


数学函数

函数名 描述 实例
ABS(x) 返回x的绝对值 返回-1的绝对值;SELECT ABS(-1)——返回1
CEIL(x) 返回大于或等于x的最小整数 SELECT CEIL(1.5) ——返回2
FLOOR(x) 返回小于或等于x的最大整数 小于或等于1.5的整数:SELECT FLOOR(1.5) ——返回1
GREATEST(expr1,expr2,expr3,……) 返回列表中的最大值 返回以下数字列表中的最大值:SELECT GREATEST(3,12,34,8,25);——34 返回以下字符串列表中的最大值:SELECT GREATEST(“Google”,“Runoob”,“Apple”) ;——Runoob
LEAST(expr1,expr2,expr3……) 返回列表中的最小值 返回以下数字列表中的最小值:SELECT LEAST(3,12,34,8,25);——3 返回以下字符串列表中的最小值:SELECT LEAST(“Google”,“Runoob”,“Apple”);——Apple
MAX(expression) 返回字段expression中的最大值 返回数据表products中字段price的最大值:ELECT MAX(Price) AS MinPrice FROM Products;
MIN(expression) 返回字段expression中的最小值 返回数据表Products中字段Price的最小值:SELECT MIN(Price) AS MinPrice FROM Products;
MOD(x,y) 返回x除以y以后的余数 5除于2的余数: SELECT MOD(5,2) ——1
PI()) 返回圆周率(3.141593) SELECT PI() ——3.141593
POW(x,y) 返回x的y次方 2的3次方: SELECT POW(2,3) —— 8
RAND() 返回0到1的随机数 SELECT RAND() ——0.93099315644334
ROUND(x) 返回离x最近的整数(遵循四舍五入) SELECT ROUND(1.23456) ——1
ROUND(X,Y) 返回指定位数的小数(遵循四舍五入) SELECT ROUND(1.23456,3) ——1.235
TRUNCATE(x,y) 返回数值x保留小数点后y位的值(与ROUND最大的区别是不会进行四舍五入) SELECT TRUNCATE(1.23456,3) ——1.234

例如:

 SELECT abs(-10);
 SELECT abs(10);
 
--  向上取整
 SELECT CEIL(1.1);
 SELECT CEIL(1.0);
 
--  向下取整
SELECT FLOOR(1.1);
SELECT FLOOR(1.9);

-- 取列表最大值
SELECT GREATEST(1,2,3);

-- 取列表最小值
SELECT LEAST(1,2,3);

-- 取模
SELECT MOD(5,2);

-- 取x的y次方
SELECT POWER(2,3);

-- 取随机数3
SELECT RAND();
SELECT FLOOR(RAND()*100);

-- 将小数的四舍五入取整
SELECT ROUND(3.1415);
SELECT ROUND(3.5415);

-- 将小数的四舍五入取指定位数小数
SELECT ROUND(3.5415
### MYSQL 函数概述 在 MySQL 数据库管理系统中,函数是一类重要的工具,可以用来执行各种计算、转换其他操作。这些函数为内置函数自定义函数两大类。以下是常见的 MySQL 内置函数类及其具体用法。 --- #### **1. 字符串函数** 字符串函数主要用于处理字符型数据,支持拼接、截取、替换等功能。 - **`CONCAT(str1, str2, ...)`**: 将多个字符串连接成一个字符串。 ```sql SELECT CONCAT('Hello', ' ', 'World'); -- 返回 "Hello World" ``` - **`SUBSTRING(str, pos, len)`**: 提取子字符串,从 `pos` 开始提取长度为 `len` 的部。 ```sql SELECT SUBSTRING('MySQL Function', 7, 8); -- 返回 "Function" ``` - **`REPLACE(str, from_str, to_str)`**: 替换字符串中的部内容。 ```sql SELECT REPLACE('Database Management System', 'Management', 'Admin'); -- 返回 "Database Admin System" ``` - **`UPPER(str)` `LOWER(str)`**: 转换字符串大小写。 ```sql SELECT UPPER('mysql'), LOWER('MYSQL'); -- 返回 "MYSQL", "mysql" ``` 以上内容来源于常见字符串函数介绍[^2]。 --- #### **2. 日期时间函数** 日期时间函数用于处理与时间日期相关的数据。 - **`NOW()`**: 获取当前的日期时间。 ```sql SELECT NOW(); -- 返回类似于 "2023-10-05 14:30:00" ``` - **`DATE(date_time_expr)`**: 提取日期部。 ```sql SELECT DATE('2023-10-05 14:30:00'); -- 返回 "2023-10-05" ``` - **`DATE_FORMAT(date, format)`**: 根据指定格式化模板返回日期/时间字符串。 ```sql SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 自定义格式输出 ``` 相关内容可参见日期函数说明[^2]。 --- #### **3. 数学函数** 数学函数提供了基本的数值运算能力。 - **`ABS(num)`**: 计算绝对值。 ```sql SELECT ABS(-10); -- 返回 10 ``` - **`ROUND(num, decimals)`**: 对数字四舍五入到指定位数的小数。 ```sql SELECT ROUND(123.456, 2); -- 返回 123.46
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火眼猊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值