1. 首页 > MySQL教程 > 正文

MySQL教程FG074-MySQL函数使用详解

GF-MySQL

内容简介:本文主要介绍MySQL相关知识,包括安装、配置、优化等内容。风哥教程参考MySQL官方文档MySQL SQL Syntax、MySQL Server Administration。 01 更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 什么是函数

函数是一种特殊的操作,它接收一个或多个参数,执行特定的操作,并返回一个结果。在MySQL中,函数用于处理数据、执行计算、转换数据类型等操作。

1.2 MySQL函数的分类

  • 字符串函数:用于处理字符串数据
  • 数值函数:用于执行数值计算
  • 日期时间函数:用于处理日期和时间
  • 聚合函数:用于对数据进行聚合计算
  • 条件函数:用于条件判断
  • 转换函数:用于数据类型转换
  • 其他函数:如系统函数、加密函数等

Part02-生产环境规划与建议

2.1 常用字符串函数

函数 描述 示例 结果
CONCAT() 连接字符串 CONCAT(‘Hello’, ‘ ‘, ‘World’) Hello World
LENGTH() 返回字符串长度 LENGTH(‘Hello’) 5
SUBSTRING() 提取子字符串 SUBSTRING(‘Hello World’, 1, 5) Hello
LOWER() 转换为小写 LOWER(‘HELLO’) hello
UPPER() 转换为大写 UPPER(‘hello’) HELLO
TRIM() 去除首尾空格 TRIM(‘ Hello ‘) Hello
REPLACE() 替换字符串 REPLACE(‘Hello World’, ‘World’, ‘MySQL’) Hello MySQL
LIKE() 模式匹配 ‘Hello’ LIKE ‘Hel%’ 1 (TRUE)

2.2 字符串函数的使用

示例:

-- 基本字符串函数
SELECT 
    CONCAT('Hello', ' ', 'World') AS concatenated,
    LENGTH('Hello') AS length,
    SUBSTRING('Hello World', 1, 5) AS substring,
    LOWER('HELLO') AS lowercase,
    UPPER('hello') AS uppercase,
    TRIM('  Hello  ') AS trimmed,
    REPLACE('Hello World', 'World', 'MySQL') AS replaced;

-- 在表中使用字符串函数
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);

INSERT INTO users (first_name, last_name) 
VALUES ('John', 'Doe'), ('Jane', 'Smith'), ('Bob', 'Johnson');

-- 拼接姓名
SELECT 
    id,
    CONCAT(first_name, ' ', last_name) AS full_name,
    LOWER(CONCAT(first_name, '.', last_name, '@fgedu.net.cn')) AS email
FROM users;
            

Part03-生产环境项目实施方案

3.1 常用数值函数

函数 描述 示例 结果
ABS() 返回绝对值 ABS(-10) 10
ROUND() 四舍五入 ROUND(3.14159, 2) 3.14
CEIL() 向上取整 CEIL(3.14) 4
FLOOR() 向下取整 FLOOR(3.99) 3
MOD() 取模 MOD(10, 3) 1
POW() 幂运算 POW(2, 3) 8
RAND() 生成随机数 RAND() 0-1之间的随机数

3.2 数值函数的使用

示例: 02 学习交流加群风哥微信: itpux-com

-- 基本数值函数
SELECT 
    ABS(-10) AS absolute,
    ROUND(3.14159, 2) AS rounded,
    CEIL(3.14) AS ceiling,
    FLOOR(3.99) AS floor,
    MOD(10, 3) AS modulus,
    POW(2, 3) AS power,
    RAND() AS random;

-- 在表中使用数值函数
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    price DECIMAL(10,2),
    quantity INT
);

INSERT INTO products (name, price, quantity) 
VALUES ('产品1', 100.50, 5), ('产品2', 200.75, 3), ('产品3', 150.25, 2);

-- 计算总价值并四舍五入
SELECT 
    name,
    price,
    quantity,
    ROUND(price * quantity, 2) AS total_value
FROM products;
            

Part04-生产案例与实战讲解

4.1 常用日期时间函数

函数 描述 示例 结果
NOW() 返回当前日期时间 NOW() 2023-01-01 12:00:00
CURDATE() 返回当前日期 CURDATE() 2023-01-01
CURTIME() 返回当前时间 CURTIME() 12:00:00
DATE() 提取日期部分 DATE(‘2023-01-01 12:00:00’) 2023-01-01
TIME() 提取时间部分 TIME(‘2023-01-01 12:00:00’) 12:00:00
YEAR() 提取年份 YEAR(‘2023-01-01’) 2023
MONTH() 提取月份 MONTH(‘2023-01-01’) 1
DAY() 提取日期 DAY(‘2023-01-01’) 1
DATE_ADD() 添加日期时间间隔 DATE_ADD(‘2023-01-01’, INTERVAL 1 DAY) 2023-01-02
DATE_SUB() 减去日期时间间隔 DATE_SUB(‘2023-01-01’, INTERVAL 1 MONTH) 2022-12-01
DATEDIFF() 计算日期差 DATEDIFF(‘2023-01-02’, ‘2023-01-01’) 1

4.2 日期时间函数的使用

示例:

-- 基本日期时间函数
SELECT 
    NOW() AS current_datetime,
    CURDATE() AS current_date,
    CURTIME() AS current_time,
    DATE('2023-01-01 12:00:00') AS date_part,
    TIME('2023-01-01 12:00:00') AS time_part,
    YEAR('2023-01-01') AS year,
    MONTH('2023-01-01') AS month,
    DAY('2023-01-01') AS day,
    DATE_ADD('2023-01-01', INTERVAL 1 DAY) AS next_day,
    DATE_SUB('2023-01-01', INTERVAL 1 MONTH) AS last_month,
    DATEDIFF('2023-01-02', '2023-01-01') AS days_diff;

-- 在表中使用日期时间函数
CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    order_date DATETIME,
    customer_id INT
);

INSERT INTO orders (order_date, customer_id) 
VALUES ('2023-01-01 10:00:00', 1), ('2023-01-02 11:00:00', 2), ('2023-01-03 12:00:00', 1);

-- 查询今天的订单
SELECT * FROM orders WHERE DATE(order_date) = CURDATE();

-- 查询本月的订单
SELECT * FROM orders WHERE YEAR(order_date) = YEAR(CURDATE()) AND MONTH(order_date) = MONTH(CURDATE());

-- 计算订单年龄(天数)
SELECT 
    id,
    order_date,
    DATEDIFF(CURDATE(), DATE(order_date)) AS order_age_days
FROM orders;
            

Part05-风哥经验总结与分享

5.1 常用聚合函数

函数 描述 示例 结果
SUM() 求和 SUM(price) 总价格
AVG() 求平均值 AVG(price) 平均价格
COUNT() 计数 COUNT(*) 记录数
MAX() 求最大值 MAX(price) 最高价格
MIN() 求最小值 MIN(price) 最低价格

5.2 聚合函数的使用

示例: 03 学习交流加群风哥QQ113257174

-- 基本聚合函数
SELECT 
    SUM(price * quantity) AS total_fgsales,
    AVG(price) AS average_price,
    COUNT(*) AS product_count,
    MAX(price) AS max_price,
    MIN(price) AS min_price
FROM products;

-- 按客户ID分组聚合
SELECT 
    customer_id,
    COUNT(*) AS order_count,
    SUM(quantity * unit_price) AS total_spent,
    MAX(order_date) AS last_order_date
FROM fgsales
GROUP BY customer_id;

-- 带条件的聚合
SELECT 
    status,
    COUNT(*) AS order_count,
    SUM(quantity * unit_price) AS total_amount
FROM fgsales
GROUP BY status
HAVING order_count > 1;
            

6. 条件函数

6.1 常用条件函数

函数 描述 示例 结果
IF() 条件判断 IF(price > 100, ‘ expensive’, ‘ cheap’) 根据价格返回不同值
IFNULL() 处理NULL值 IFNULL(name, ‘Unknown’) 如果name为NULL返回’Unknown’
NULLIF() 比较两个值 NULLIF(a, b) 如果a=b返回NULL,否则返回a
CASE 多条件判断 CASE WHEN price > 200 THEN ‘high’ WHEN price > 100 THEN ‘medium’ ELSE ‘low’ END 根据价格返回不同级别

6.2 条件函数的使用

示例:

-- 基本条件函数
SELECT 
    name,
    price,
    IF(price > 150, '昂贵', '实惠') AS price_level,
    IFNULL(description, '无描述') AS description
FROM products;

-- 使用CASE语句
SELECT 
    name,
    price,
    CASE 
        WHEN price > 200 THEN '高端产品'
        WHEN price > 100 THEN '中端产品'
        ELSE '低端产品'
    END AS product_level
FROM products;

-- 处理NULL值
SELECT 
    id,
    first_name,
    last_name,
    CONCAT(IFNULL(first_name, ''), ' ', IFNULL(last_name, '')) AS full_name
FROM users;
            

7. 转换函数

7.1 常用转换函数

函数 描述 示例 结果
CAST() 类型转换 CAST(‘123’ AS INT) 123
CONVERT() 类型转换 CONVERT(‘123’, UNSIGNED) 123
DATE_FORMAT() 日期格式化 DATE_FORMAT(NOW(), ‘%Y-%m-%d %H:%i:%s’) 2023-01-01 12:00:00
STR_TO_DATE() 字符串转日期 STR_TO_DATE(‘2023-01-01’, ‘%Y-%m-%d’) 2023-01-01

7.2 转换函数的使用

示例:

-- 基本转换函数
SELECT 
    CAST('123' AS INT) AS string_to_int,
    CAST(123 AS CHAR) AS int_to_string,
    CONVERT('123.45', DECIMAL(10,2)) AS string_to_decimal,
    DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_date,
    STR_TO_DATE('2023-01-01', '%Y-%m-%d') AS string_to_date;

-- 在表中使用转换函数
SELECT 
    id,
    order_date,
    DATE_FORMAT(order_date, '%Y年%m月%d日 %H时%i分%s秒') AS formatted_order_date,
    CAST(total_amount AS CHAR) AS amount_string
FROM orders;
            

8. 其他函数

8.1 系统函数

函数 描述 示例 结果
USER() 返回当前用户 USER() user@localhost
DATABASE() 返回当前数据库 DATABASE() test
VERSION() 返回MySQL版本 VERSION() 8.4.0
UUID() 生成UUID UUID() 唯一标识符

8.2 加密函数

函数 描述 示例 结果
MD5() 生成MD5哈希 MD5(‘password’) 5f4dcc3b5aa765d61d8327deb882cf99
SHA1() 生成SHA1哈希 SHA1(‘password’) 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
PASSWORD() 生成密码哈希 PASSWORD(‘password’) 加密后的密码

8.3 其他函数的使用

示例:

-- 系统函数
SELECT 
    USER() AS current_user,
    DATABASE() AS current_database,
    VERSION() AS mysql_version,
    UUID() AS generated_uuid;

-- 加密函数
SELECT 
    MD5('password') AS md5_hash,
    SHA1('password') AS sha1_hash,
    PASSWORD('password') AS password_hash;
            

9. 函数使用最佳实践

9.1 函数的性能考虑

  • 避免在WHERE子句中使用函数,会导致索引失效
  • 合理使用聚合函数,避免在大表上进行复杂的聚合操作
  • 使用内置函数代替自定义函数,内置函数通常性能更好

9.2 函数的可读性

  • 使用有意义的函数名
  • 合理使用括号,提高代码可读性
  • 避免嵌套过多的函数,会降低代码可读性

9.3 函数的使用场景

  • 字符串函数:处理文本数据
  • 数值函数:执行数学计算
  • 日期时间函数:处理时间相关数据
  • 聚合函数:统计数据
  • 条件函数:根据条件返回不同结果
  • 转换函数:转换数据类型

10. 常见错误与解决方案

10.1 函数参数错误

问题:函数参数类型或数量不正确 04 风哥提示:

解决方案:检查函数的参数要求,确保参数类型和数量正确

10.2 函数返回值错误

问题:函数返回值不符合预期

解决方案:检查函数的返回值类型和计算逻辑 05更多学习教程公众号风哥教程itpux_com

10.3 性能问题

问题:函数使用导致性能下降

解决方案:优化函数使用,避免在大表上使用复杂函数

11. 示例:综合使用函数

示例:

-- 创建综合示例表
CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    hire_date DATE,
    salary DECIMAL(10,2),
    department VARCHAR(50)
);

-- 插入数据
INSERT INTO employees (first_name, last_name, hire_date, salary, department) 
VALUES 
    ('John', 'Doe', '2020-01-01', 5000.00, 'IT'),
    ('Jane', 'Smith', '2021-02-01', 6000.00, 'HR'),
    ('Bob', 'Johnson', '2019-03-01', 5500.00, 'IT'),
    ('Alice', 'Brown', '2022-04-01', 6500.00, 'Finance'),
    ('Charlie', 'Davis', '2020-05-01', 7000.00, 'IT');

-- 综合使用函数
SELECT 
    id,
    CONCAT(first_name, ' ', last_name) AS full_name,
    department,
    salary,
    CASE 
        WHEN salary > 6000 THEN '高收入'
        WHEN salary > 5000 THEN '中等收入'
        ELSE '低收入'
    END AS salary_level,
    hire_date,
    DATEDIFF(CURDATE(), hire_date) AS days_employed,
    ROUND(DATEDIFF(CURDATE(), hire_date) / 365, 1) AS years_employed
FROM employees
ORDER BY salary DESC;

-- 按部门聚合
SELECT 
    department,
    COUNT(*) AS employee_count,
    AVG(salary) AS average_salary,
    MAX(salary) AS max_salary,
    MIN(salary) AS min_salary
FROM employees
GROUP BY department;
            

12. 总结

本教程详细介绍了MySQL的函数使用,包括: 06 from mysql视频:www.itpux.com

  • 函数概述
  • 字符串函数
  • 数值函数
  • 日期时间函数
  • 聚合函数
  • 条件函数
  • 转换函数
  • 其他函数
  • 函数使用最佳实践
  • 常见错误与解决方案

函数是MySQL中强大的工具,掌握各种函数的使用方法对于编写高效、正确的SQL语句非常重要。在实际项目中,应根据具体的业务需求选择合适的函数,并注意函数的性能影响和使用场景,以提高SQL语句的性能和可读性。

提示:在使用函数时,应注意函数的参数要求和返回值类型,以避免出现错误。同时,应合理使用函数,避免过度使用导致性能下降。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息