Loading

常用 MySQL 函数记录

字符串函数

CONCAT(str1, str2, ...)

将多个字符串连接成一个字符串。

示例:

SELECT CONCAT('Hello', ' ', 'World'); -- 返回 'Hello World'
SELECT CONCAT('Name: ', first_name, ' ', last_name) FROM employees WHERE employee_id = 100;

LENGTH(str) / CHAR_LENGTH(str)

返回字符串的长度(字节数)/字符数。

示例:

SELECT LENGTH('abc'); -- 返回 3
SELECT LENGTH('你好'); -- 在 UTF-8 编码下可能返回 6
SELECT CHAR_LENGTH('你好'); -- 返回 2

SUBSTRING(str, pos, len) / SUBSTR(str, pos, len) / MID(str, pos, len)

从字符串 str 的位置 pos 开始截取长度为 len 的子字符串。

示例:

SELECT SUBSTRING('abcdefg', 2, 3); -- 返回 'bcd'
SELECT SUBSTR('abcdefg', -3, 2);  -- 返回 'ef'
SELECT MID('abcdefg', 3, 4);     -- 返回 'cdef'

LEFT(str, len) / RIGHT(str, len)

返回字符串 str 最左边/最右边的 len 个字符。

示例:

SELECT LEFT('abcdefg', 3);  -- 返回 'abc'
SELECT RIGHT('abcdefg', 2); -- 返回 'fg'

UPPER(str) / LOWER(str)

将字符串 str 转换为大写/小写。

示例:

SELECT UPPER('hello'); -- 返回 'HELLO'
SELECT LOWER('WORLD'); -- 返回 'world'

TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)

移除字符串 str 开头、结尾或两端的空格或指定的字符串 remstr

示例:

SELECT TRIM('   hello   ');       -- 返回 'hello'
SELECT TRIM(LEADING 'x' FROM 'xxxhelloxxx'); -- 返回 'helloxxx'
SELECT TRIM(TRAILING 'x' FROM 'xxxhelloxxx'); -- 返回 'xxxhello'
SELECT TRIM(BOTH 'x' FROM 'xxxhelloxxx');    -- 返回 'hello'

REPLACE(str, from_str, to_str)

将字符串 str 中所有出现的子字符串 from_str 替换为 to_str

示例:

SELECT REPLACE('[www.mysql.com](https://www.mysql.com)', 'w', 'W'); -- 返回 'WWW.mysql.com'
SELECT REPLACE('Hello World', 'World', 'China'); -- 返回 'Hello China'

LOCATE(substr, str[, pos]) / POSITION(substr IN str) / INSTR(str, substr)

返回子字符串 substr 在字符串 str 中第一次出现的位置。

示例:

SELECT LOCATE('b', 'abcde');      -- 返回 2
SELECT LOCATE('b', 'abcde', 3);   -- 返回 0
SELECT POSITION('c' IN 'abcde'); -- 返回 3
SELECT INSTR('abcde', 'd');      -- 返回 4

数值函数

ABS(x)

返回 x 的绝对值。

示例:

SELECT ABS(-10); -- 返回 10
SELECT ABS(5);   -- 返回 5

CEIL(x) / CEILING(x)

返回大于或等于 x 的最小整数。

示例:

SELECT CEIL(3.14);  -- 返回 4
SELECT CEILING(-3.14); -- 返回 -3

FLOOR(x)

返回小于或等于 x 的最大整数。

示例:

SELECT FLOOR(3.14);  -- 返回 3
SELECT FLOOR(-3.14); -- 返回 -4

ROUND(x[, d])

x 四舍五入到 d 位小数。

示例:

SELECT ROUND(3.14159, 2); -- 返回 3.14
SELECT ROUND(3.5);       -- 返回 4
SELECT ROUND(3.4);       -- 返回 3

MOD(n, m) / n % m / n MOD m

返回 n 除以 m 的余数。

示例:

SELECT MOD(10, 3); -- 返回 1
SELECT 10 % 3;     -- 返回 1
SELECT 10 MOD 3;    -- 返回 1

RAND()

返回一个 0 到 1 之间的随机浮点数。

示例:

SELECT RAND();        -- 每次执行返回不同的随机数
SELECT RAND() * 100; -- 返回 0 到 100 之间的随机数

TRUNCATE(x, d)

将数字 x 截断到 d 位小数。

示例:

SELECT TRUNCATE(3.14159, 2); -- 返回 3.14
SELECT TRUNCATE(3.999, 0);   -- 返回 3

日期和时间函数

NOW() / SYSDATE()

返回当前日期和时间。

示例:

SELECT NOW();        -- 例如:'2025-04-23 16:10:00'
SELECT SYSDATE();    -- 例如:'2025-04-23 16:10:00'

CURDATE() / CURRENT_DATE()

返回当前日期。

示例:

SELECT CURDATE();     -- 例如:'2025-04-23'
SELECT CURRENT_DATE(); -- 例如:'2025-04-23'

CURTIME() / CURRENT_TIME()

返回当前时间。

示例:

SELECT CURTIME();     -- 例如:'16:10:00'
SELECT CURRENT_TIME(); -- 例如:'16:10:00'

DATE(datetime)

提取日期时间表达式的日期部分。

示例:

SELECT DATE('2025-04-23 16:10:00'); -- 返回 '2025-04-23'

TIME(datetime)

提取日期时间表达式的时间部分。

示例:

SELECT TIME('2025-04-23 16:10:00'); -- 返回 '16:10:00'

YEAR(date) / MONTH(date) / DAY(date)

返回日期或日期时间表达式的年份/月份/日。

示例:

SELECT YEAR('2025-04-23');   -- 返回 2025
SELECT MONTH('2025-04-23');  -- 返回 4
SELECT DAY('2025-04-23');    -- 返回 23

HOUR(time) / MINUTE(time) / SECOND(time)

返回时间或日期时间表达式的小时/分钟/秒。

示例:

SELECT HOUR('16:10:00');   -- 返回 16
SELECT MINUTE('16:10:00'); -- 返回 10
SELECT SECOND('16:10:00'); -- 返回 0

DATE_FORMAT(date, format)

根据指定的 format 格式化日期或日期时间值。

示例:

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); -- 返回 '2025-04-23 16:10:00'
SELECT DATE_FORMAT(CURDATE(), '%d/%m/%Y');       -- 返回 '23/04/2025'
SELECT DATE_FORMAT(CURTIME(), '%h:%i %p');       -- 返回 '04:10 PM'

DATE_ADD(date, INTERVAL expr unit) / DATE_SUB(date, INTERVAL expr unit)

在日期上添加或减去指定的时间间隔。

示例:

SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY);    -- 返回七天后的日期
SELECT DATE_SUB(NOW(), INTERVAL 1 HOUR);      -- 返回一小时前的时间
SELECT DATE_ADD('2025-04-23', INTERVAL '1-2' YEAR_MONTH); -- 返回 '2026-06-23'

DATEDIFF(date1, date2)

返回 date1date2 之间的天数差。

示例:

SELECT DATEDIFF('2025-04-30', '2025-04-23'); -- 返回 7
SELECT DATEDIFF('2025-04-23', '2025-04-30'); -- 返回 -7

TIME_FORMAT(time, format)

根据指定的 format 格式化时间值。

示例:

SELECT TIME_FORMAT(CURTIME(), '%H:%i:%s'); -- 返回 '16:10:00'
SELECT TIME_FORMAT('10:30:00', '%h:%i %p'); -- 返回 '10:30 AM'

聚合函数

COUNT([DISTINCT] expr)

返回满足条件的行数。

示例:

SELECT COUNT(*) FROM employees;
SELECT COUNT(department_id) FROM employees;
SELECT COUNT(DISTINCT department_id) FROM employees;

SUM(expr)

返回指定列的总和。

示例:

SELECT SUM(salary) FROM employees;
SELECT SUM(order_amount) FROM orders WHERE customer_id = 123;

AVG(expr)

返回指定列的平均值。

示例:

SELECT AVG(salary) FROM employees;
SELECT AVG(grade) FROM student_scores WHERE class_id = 'A';

MIN(expr)

返回指定列的最小值。

示例:

SELECT MIN(salary) FROM employees;
SELECT MIN(order_date) FROM orders;

MAX(expr)

返回指定列的最大值。

示例:

SELECT MAX(salary) FROM employees;
SELECT MAX(order_date) FROM orders;

GROUP_CONCAT([DISTINCT] expr [,separator ORDER BY {col_name | expr} [ASC | DESC] [, ...]] [SEPARATOR str])

将每个分组中的值连接成一个字符串。

示例:

SELECT department_id, GROUP_CONCAT(last_name ORDER BY last_name SEPARATOR ', ')
FROM employees
GROUP BY department_id;

SELECT GROUP_CONCAT(DISTINCT country) FROM customers;

控制流函数

IF(expr1, expr2, expr3)

如果 expr1 为真,则返回 expr2,否则返回 expr3

示例:

SELECT IF(salary > 5000, 'High', 'Low') AS salary_level FROM employees;

IFNULL(expr1, expr2)

如果 expr1NULL,则返回 expr2,否则返回 expr1

示例:

SELECT IFNULL(commission_pct, 0) FROM employees;

NULLIF(expr1, expr2)

如果 expr1 等于 expr2,则返回 NULL,否则返回 expr1

示例:

SELECT NULLIF(order_qty, shipped_qty) FROM orders WHERE order_id = 101;

CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END

类似于 switch 语句。

示例:

SELECT
    order_status,
    CASE order_status
        WHEN 'Shipped' THEN '已发货'
        WHEN 'Pending' THEN '待处理'
        WHEN 'Cancelled' THEN '已取消'
        ELSE '未知状态'
    END AS status_description
FROM orders;

CASE WHEN condition THEN result [WHEN condition THEN result ...] [ELSE result] END

类似于 if-else if-...-else 语句。

示例:

SELECT
    salary,
    CASE
        WHEN salary >= 10000 THEN '优秀'
        WHEN salary >= 8000 THEN '良好'
        WHEN salary >= 6000 THEN '及格'
        ELSE '不及格'
    END AS performance
FROM employees;

其他常用函数

VERSION()

返回 MySQL 服务器的版本。

示例:

SELECT VERSION();

DATABASE() / SCHEMA()

返回当前数据库名。

示例:

SELECT DATABASE();
SELECT SCHEMA();

USER() / CURRENT_USER()

返回当前 MySQL 用户名和主机名。

示例:

SELECT USER();
SELECT CURRENT_USER();

LAST_INSERT_ID()

返回最近一次 INSERT 操作自动生成的主键值。

示例:

INSERT INTO products (name) VALUES ('New Product');
SELECT LAST_INSERT_ID();

MD5(str)

计算字符串 str 的 MD5 哈希值。

示例:

SELECT MD5('password123');

posted @ 2025-04-23 16:18  夷某蓁  阅读(25)  评论(0)    收藏  举报