详细分析Mysql常用函数(附Demo)

目录

  • 前言
  • [1. 聚合函数](#1. 聚合函数)
  • [2. 字符串函数](#2. 字符串函数)
  • [3. 日期函数](#3. 日期函数)
  • [4. 条件函数](#4. 条件函数)
  • [5. 数值函数](#5. 数值函数)
  • [6. 类型转换函数](#6. 类型转换函数)

前言

由于实战中经常运用,索性来一个总结文

创建一个名为 employees 的表,包含以下字段:

java 复制代码
employee_id:员工ID,整数类型
first_name:员工名,字符串类型
last_name:员工姓,字符串类型
salary:工资,整数类型
hire_date:入职日期,日期类型

具体创建表格内容:

sql 复制代码
CREATE TABLE employees (
    employee_id INT,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    salary INT,
    hire_date DATE
);

数据内容:

sql 复制代码
INSERT INTO employees (employee_id, first_name, last_name, salary, hire_date) VALUES
(1, 'Alice', 'Smith', 60000, '2020-03-15'),
(2, 'Bob', 'Johnson', 75000, '2019-07-20'),
(3, 'Charlie', 'Brown', 50000, '2021-01-10'),
(4, 'David', 'Lee', 80000, '2018-11-05'),
(5, 'Emma', 'Garcia', 55000, '2022-05-28');

1. 聚合函数

以下函数比较简单,就不放结果图了

  • COUNT() :计算行数或非空值的数量
    SELECT COUNT(*) AS total_employees FROM employees;
  • SUM() :计算指定列的总和
    SELECT SUM(salary) AS total_salary FROM employees;
  • AVG() :计算指定列的平均值
    SELECT AVG(salary) AS average_salary FROM employees;
  • MIN() :找到指定列的最小值
    SELECT MIN(salary) AS min_salary FROM employees;
  • MAX() :找到指定列的最大值
    SELECT MAX(salary) AS max_salary FROM employees;

2. 字符串函数

  • CONCAT() :连接两个或多个字符串
    SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;

  • SUBSTRING() :从字符串中提取子字符串
    SELECT SUBSTRING(first_name, 1, 2) AS initials FROM employees;

  • LENGTH() :计算字符串的长度
    SELECT first_name, LENGTH(first_name) AS name_length FROM employees;

  • UPPER() :将字符串转换为大写
    SELECT UPPER(last_name) AS last_name_upper FROM employees;

  • LOWER() :将字符串转换为小写
    SELECT LOWER(first_name) AS first_name_lower FROM employees;

  • TRIM() :去除字符串两端的空格
    SELECT TRIM(last_name) AS last_name_trimmed FROM employees;

  • REPLACE() :替换字符串中的子字符串
    SELECT REPLACE(first_name, 'a', 'A') AS replaced_name FROM employees;

3. 日期函数

  • NOW():返回当前日期和时间

  • SELECT NOW() AS current_datetime;

  • DATE() :从日期时间值中提取日期部分
    SELECT hire_date, DATE(hire_date) AS hire_date_only FROM employees;

  • YEAR() :从日期中提取年份
    SELECT hire_date, YEAR(hire_date) AS hire_year FROM employees;

  • MONTH() :从日期中提取月份
    SELECT hire_date, MONTH(hire_date) AS hire_month FROM employees;

  • DAY() :从日期中提取天数
    SELECT hire_date, DAY(hire_date) AS hire_day FROM employees;

  • DATEDIFF() :计算两个日期之间的天数差异
    SELECT hire_date, DATEDIFF(NOW(), hire_date) AS days_since_hire FROM employees;

4. 条件函数

  • case结构:
sql 复制代码
SELECT
    employee_id,
    first_name,
    last_name,
    salary,
    CASE
        WHEN salary < 1000 THEN 'A'
        WHEN salary < 2000 THEN 'B'
        WHEN salary < 3000 THEN 'C'
        ELSE 'D'
    END AS salary_level
FROM employees;

截图如下:

  • if结构如下:
sql 复制代码
SELECT
    employee_id,
    first_name,
    last_name,
    salary,
    IF(salary < 60000, '需要关注', '正常') AS status
FROM employees;

截图如下:

5. 数值函数

  • ROUND():四舍五入到指定的小数位数
sql 复制代码
SELECT
    employee_id,
    first_name,
    last_name,
    salary,
    ROUND(salary) AS rounded_salary
FROM employees;
  • ABS():返回数的绝对值
sql 复制代码
SELECT
    employee_id,
    first_name,
    last_name,
    salary,
    ABS(salary) AS absolute_salary
FROM employees;
  • SQRT():返回数的平方根
sql 复制代码
SELECT
    employee_id,
    first_name,
    last_name,
    salary,
    SQRT(salary) AS sqrt_salary
FROM employees;

以上三个执行代码,数据都一样,截图如下:

6. 类型转换函数

CAST():将一个数据类型转换为另一个数据类型

(证书转换为浮点数,此处使用DECIMAL不是FLOAT)

sql 复制代码
SELECT
    employee_id,
    first_name,
    last_name,
    salary,
    CAST(salary AS DECIMAL) AS salary_decimal
FROM employees;

截图如下:

其他函数:

IFNULL():如果表达式为 NULL,则返回替代值

sql 复制代码
SELECT
    employee_id,
    first_name,
    IFNULL(last_name, 'Unknown') AS last_name_fixed,
    salary,
    hire_date
FROM employees;
相关推荐
WeiQ_34 分钟前
解决phpstudy 8.x软件中php8.2.9没有redis扩展的问题
数据库·redis·缓存
DashVector5 小时前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
KYGALYX6 小时前
在Linux中备份msyql数据库和表的详细操作
linux·运维·数据库
檀越剑指大厂6 小时前
金仓KReplay:定义数据库平滑迁移新标准
数据库
努力成为一个程序猿.6 小时前
【Flink】FlinkSQL-动态表和持续查询概念
大数据·数据库·flink
kali-Myon7 小时前
NewStarCTF2025-Week4-Web
sql·安全·web安全·php·ctf·ssti·ssrf
毕设十刻7 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
liliangcsdn8 小时前
如何利用约束提示优化LLM在问题转sql的一致性
数据库·sql
熙客8 小时前
Kubernetes是如何保证有状态应用数据安全和快速恢复的
mysql·云原生·容器·kubernetes
Java爱好狂.9 小时前
分布式ID|从源码角度深度解析美团Leaf双Buffer优化方案
java·数据库·分布式·分布式id·es·java面试·java程序员