当前位置: 首页 > article >正文

MySQL常用的函数

文章目录

    • 1. 字符串函数
    • 2. 数学函数
    • 3. 聚合函数
    • 4. 日期和时间函数
    • 5. 条件判断函数
    • 6. JSON 函数(MySQL 5.7+)
    • 7. 加密和压缩函数

MySQL 提供了多种内置函数,这些函数可以用于数据处理、字符串操作、数学计算、日期时间处理等多个方面。以下是一些常用的 MySQL 函数分类及示例:

1. 字符串函数

CONCAT(str1, str2, …): 连接两个或多个字符串。
LENGTH(str): 返回字符串的长度(字节数)。对于多字节字符集,可能不等于字符数。
CHAR_LENGTH(str): 返回字符串的字符数。
LOWER(str): 将字符串转换为小写。
UPPER(str): 将字符串转换为大写。
SUBSTRING(str, pos, len): 从字符串中提取子字符串。
REPLACE(str, from_str, to_str): 替换字符串中的子串。
TRIM([BOTH | LEADING | TRAILING] [remstr] FROM] str): 去除字符串两侧的空格或指定字符。
CONCAT(s1, s2, …): 将多个字符串连接成一个字符串。
SELECT CONCAT(‘Hello’, ’ ‘, ‘World’);
LENGTH(s): 返回字符串的长度(字节数)。
SELECT LENGTH(‘abc’); – 返回 3
SUBSTRING(s, start, length): 返回从 start 位置开始的 length 个字符。
SELECT SUBSTRING(‘abcdef’, 2, 3); – 返回 ‘bcd’
UPPER(s): 将字符串转换为大写。
SELECT UPPER(‘hello’); – 返回 ‘HELLO’
LOWER(s): 将字符串转换为小写。
SELECT LOWER(‘HELLO’); – 返回 ‘hello’
TRIM(s): 移除字符串两端的空格。
SELECT TRIM(’ hello '); – 返回 ‘hello’

2. 数学函数

ABS(x): 返回 x 的绝对值。
CEIL(x): 返回大于或等于 x 的最小整数。
FLOOR(x): 返回小于或等于 x 的最大整数。
RAND(): 返回一个 0 到 1 之间的随机浮点数。
ROUND(x, d): 对 x 进行四舍五入,保留 d 位小数。
ABS(x): 返回 x 的绝对值。
SELECT ABS(-10); – 返回 10
ROUND(x, d): 将 x 四舍五入到 d 位小数。
SELECT ROUND(123.456, 2); – 返回 123.46
FLOOR(x): 返回小于或等于 x 的最大整数。
SELECT FLOOR(2.7); – 返回 2
CEIL(x): 返回大于或等于 x 的最小整数。
SELECT CEIL(2.7); – 返回 3
MOD(x, y): 返回 x 除以 y 的余数。
SELECT MOD(10, 3); – 返回 1

3. 聚合函数

COUNT(expr): 返回查询结果的行数。
SUM(column): 返回某列值的总和。
AVG(column): 返回某列的平均值。
MAX(column): 返回某列的最大值。
MIN(column): 返回某列的最小值。
COUNT(expression): 计算满足条件的行数。
SELECT COUNT(*) FROM users; – 返回表中行的数量
SUM(expression): 计算表达式的总和。
SELECT SUM(salary) FROM employees; – 返回工资总和
AVG(expression): 计算表达式的平均值。
SELECT AVG(salary) FROM employees; – 返回平均工资
MAX(expression): 返回表达式的最大值。
SELECT MAX(salary) FROM employees; – 返回最大工资
MIN(expression): 返回表达式的最小值。
SELECT MIN(salary) FROM employees; – 返回最小工资

4. 日期和时间函数

NOW(): 返回当前的日期和时间。
CURDATE(): 返回当前的日期。
CURTIME(): 返回当前的时间。
DATE_FORMAT(date, format): 按照指定的格式显示日期/时间值。
DATEDIFF(expr1, expr2): 返回两个日期之间的天数。
YEAR(date): 从日期中提取年份。
MONTH(date): 从日期中提取月份。
DAY(date): 从日期中提取日。
NOW(): 返回当前日期和时间。
SELECT NOW(); – 返回当前的日期时间,如 ‘2024-09-12 10:00:00’
CURDATE(): 返回当前日期(不包括时间)。
SELECT CURDATE(); – 返回当前日期,如 ‘2024-09-12’
CURTIME(): 返回当前时间(不包括日期)。
SELECT CURTIME(); – 返回当前时间,如 ‘10:00:00’
DATE_ADD(date, INTERVAL n unit): 为指定日期添加指定时间间隔。
SELECT DATE_ADD(‘2024-09-12’, INTERVAL 10 DAY); – 返回 ‘2024-09-22’
DATEDIFF(date1, date2): 返回两个日期之间的天数差。
SELECT DATEDIFF(‘2024-09-12’, ‘2024-09-01’); – 返回 11
DATE_FORMAT(date, format): 将日期格式化为指定的字符串格式。
SELECT DATE_FORMAT(NOW(), ‘%Y-%m-%d %H:%i:%s’); – 返回 ‘2024-09-12 10:00:00’

5. 条件判断函数

IF(expr, v1, v2): 如果 expr 为真,则返回 v1,否则返回 v2。
CASE WHEN cond1 THEN result1 WHEN cond2 THEN result2 … ELSE resultN END: 类似于编程语言中的 switch 语句,根据条件返回不同的结果。

  1. IF()
    IF() 函数用于简单的条件判断,它类似于编程语言中的三元运算符。
    语法:
    IF(condition, value_if_true, value_if_false)
    示例:
    SELECT IF(10 > 5, ‘True’, ‘False’); – 返回 ‘True’
  2. IFNULL()
    IFNULL() 用于判断表达式是否为 NULL,如果是 NULL,则返回另一个值。
    语法:
    IFNULL(expression, alternate_value)
    示例:
    SELECT IFNULL(NULL, ‘No Value’); – 返回 ‘No Value’
  3. NULLIF()
    NULLIF() 比较两个值,如果相等则返回 NULL,否则返回第一个值。
    语法:
    NULLIF(expression1, expression2)
    示例:
    SELECT NULLIF(10, 10); – 返回 NULL
    SELECT NULLIF(10, 5); – 返回 10
  4. CASE
    CASE 表达式是 MySQL 中最灵活的条件判断工具,类似于 switch 语句。
    有两种使用方式:简单 CASE 和 搜索 CASE。
    简单 CASE
    根据值匹配条件。
    语法:
    CASE value
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ELSE result_n
    END
    示例:
    SELECT CASE 2
    WHEN 1 THEN ‘One’
    WHEN 2 THEN ‘Two’
    ELSE ‘Other’
    END; – 返回 ‘Two’
    搜索 CASE
    根据条件表达式进行判断。
    语法:
    CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ELSE result_n
    END
    示例:
    SELECT CASE
    WHEN salary > 10000 THEN ‘High Salary’
    WHEN salary BETWEEN 5000 AND 10000 THEN ‘Medium Salary’
    ELSE ‘Low Salary’
    END AS salary_category
    FROM employees;
  5. COALESCE()
    COALESCE() 函数返回第一个非 NULL 的值。它可以接收多个参数,并从左到右检查参数的值。
    语法:
    COALESCE(value1, value2, …, value_n)
    示例:
    SELECT COALESCE(NULL, NULL, ‘First Non-Null’); – 返回 ‘First Non-Null’
  6. GREATEST() 和 LEAST()
    GREATEST() 返回多个值中的最大值。
    SELECT GREATEST(1, 5, 3, 9, 2); – 返回 9
    LEAST() 返回多个值中的最小值。
    SELECT LEAST(1, 5, 3, 9, 2); – 返回 1
  7. IN()
    IN() 用于检查某个值是否在一组值中。
    语法:
    expression IN (value1, value2, …, value_n)
    示例:
    SELECT 5 IN (1, 2, 3, 5); – 返回 1(表示 True)
  8. BETWEEN
    BETWEEN 用于检查某个值是否在给定的范围内(包括边界值)。
    语法:
    expression BETWEEN value1 AND value2
    示例:
    SELECT 10 BETWEEN 5 AND 15; – 返回 1(表示 True)
  9. EXISTS()
    EXISTS() 用于检查子查询是否返回任何行,返回布尔值。
    语法:
    EXISTS(subquery)
    示例:
    SELECT EXISTS(SELECT 1 FROM users WHERE id = 1); – 如果有 id 为 1 的用户,返回 1
  10. ISNULL()
    ISNULL() 用于判断某个值是否为 NULL。
    语法:
    ISNULL(expression)
    示例:
    SELECT ISNULL(NULL); – 返回 1(表示 True)
    这些条件判断函数可以帮助构建更灵活的查询逻辑,尤其是在处理复杂数据分析或基于条件的查询时。

6. JSON 函数(MySQL 5.7+)

JSON_EXTRACT(json_doc, path, …): 从 JSON 文档中提取数据。
JSON_SET(json_doc, path, val, …): 在 JSON 文档中的指定路径设置值。
JSON_ARRAY([val, …]): 创建一个 JSON 数组。
JSON_OBJECT(key, val, …): 创建一个 JSON 对象。
MySQL 提供了一系列用于操作和查询 JSON 数据类型的函数,可以有效处理 JSON 文档。以下是常用的 MySQL JSON 函数:

  1. JSON_OBJECT()
    生成一个 JSON 对象(即键值对的集合)。
    语法:
    JSON_OBJECT(key1, value1, key2, value2, …)
    示例:
    SELECT JSON_OBJECT(‘name’, ‘John’, ‘age’, 30);
    – 返回 {“name”: “John”, “age”: 30}
  2. JSON_ARRAY()
    生成一个 JSON 数组。
    语法:
    JSON_ARRAY(value1, value2, …)
    示例:
    SELECT JSON_ARRAY(‘apple’, ‘banana’, 10, true);
    – 返回 [“apple”, “banana”, 10, true]
  3. JSON_EXTRACT()
    从 JSON 文档中提取指定路径的数据,类似于使用 . 或 -> 访问 JSON 的属性。
    语法:
    JSON_EXTRACT(json_doc, path)
    示例:
    SELECT JSON_EXTRACT(‘{“name”: “John”, “age”: 30}’, ‘$.name’);
    – 返回 “John”
  4. -> 和 ->> 操作符
    -> 用于提取 JSON 对象的某个字段。
    ->> 用于提取 JSON 对象字段并直接返回纯文本(而非 JSON 格式)。
    示例:
    SELECT ‘{“name”: “John”, “age”: 30}’->‘$.name’;
    – 返回 “John”

SELECT ‘{“name”: “John”, “age”: 30}’->>‘ . n a m e ′ ; − − 返回 J o h n (去掉了引号) 5. J S O N S E T ( ) 更新 J S O N 文档中指定路径上的数据。语法: J S O N S E T ( j s o n d o c , p a t h , v a l u e ) 示例: S E L E C T J S O N S E T ( ′ " n a m e " : " J o h n " , " a g e " : 30 ′ , ′ .name'; -- 返回 John(去掉了引号) 5. JSON_SET() 更新 JSON 文档中指定路径上的数据。 语法: JSON_SET(json_doc, path, value) 示例: SELECT JSON_SET('{"name": "John", "age": 30}', ' .name;返回John(去掉了引号)5.JSONSET()更新JSON文档中指定路径上的数据。语法:JSONSET(jsondoc,path,value)示例:SELECTJSONSET("name":"John","age":30,.age’, 31);
– 返回 {“name”: “John”, “age”: 31}
6. JSON_INSERT()
仅在路径不存在时插入数据,如果路径已经存在,则不进行任何操作。
语法:
JSON_INSERT(json_doc, path, value)
示例:
SELECT JSON_INSERT(‘{“name”: “John”}’, ‘ . a g e ′ , 30 ) ; − − 返回 " n a m e " : " J o h n " , " a g e " : 30 7. J S O N R E P L A C E ( ) 替换 J S O N 文档中指定路径的数据,如果路径不存在则不做任何操作。语法: J S O N R E P L A C E ( j s o n d o c , p a t h , v a l u e ) 示例: S E L E C T J S O N R E P L A C E ( ′ " n a m e " : " J o h n " , " a g e " : 30 ′ , ′ .age', 30); -- 返回 {"name": "John", "age": 30} 7. JSON_REPLACE() 替换 JSON 文档中指定路径的数据,如果路径不存在则不做任何操作。 语法: JSON_REPLACE(json_doc, path, value) 示例: SELECT JSON_REPLACE('{"name": "John", "age": 30}', ' .age,30);返回"name":"John","age":307.JSONREPLACE()替换JSON文档中指定路径的数据,如果路径不存在则不做任何操作。语法:JSONREPLACE(jsondoc,path,value)示例:SELECTJSONREPLACE("name":"John","age":30,.age’, 31);
– 返回 {“name”: “John”, “age”: 31}
8. JSON_REMOVE()
删除 JSON 文档中指定路径上的键。
语法:
JSON_REMOVE(json_doc, path)
示例:
SELECT JSON_REMOVE(‘{“name”: “John”, “age”: 30}’, ‘$.age’);
– 返回 {“name”: “John”}
9. JSON_MERGE() 和 JSON_MERGE_PATCH()
JSON_MERGE():将多个 JSON 文档合并,重复的键会覆盖之前的值。
JSON_MERGE_PATCH():更加智能地合并 JSON 文档,遵循 JSON Merge Patch 标准。
语法:
JSON_MERGE(json_doc1, json_doc2, …)
JSON_MERGE_PATCH(json_doc1, json_doc2, …)
示例:
SELECT JSON_MERGE(‘{“name”: “John”}’, ‘{“age”: 30}’);
– 返回 {“name”: “John”, “age”: 30}

SELECT JSON_MERGE_PATCH(‘{“name”: “John”}’, ‘{“name”: “Jane”, “age”: 30}’);
– 返回 {“name”: “Jane”, “age”: 30}
10. JSON_CONTAINS()
检查 JSON 文档中是否包含特定的值。
语法:
JSON_CONTAINS(json_doc, value, [path])
示例:
SELECT JSON_CONTAINS(‘{“name”: “John”, “age”: 30}’, ‘“John”’, ‘$.name’);
– 返回 1(表示 true)

SELECT JSON_CONTAINS(‘[1, 2, 3]’, ‘1’);
– 返回 1(表示 true)
11. JSON_LENGTH()
返回 JSON 数组或对象的长度。
语法:
JSON_LENGTH(json_doc, [path])
示例:
SELECT JSON_LENGTH(‘{“name”: “John”, “age”: 30}’);
– 返回 2

SELECT JSON_LENGTH(‘[1, 2, 3]’);
– 返回 3
12. JSON_KEYS()
返回 JSON 对象中的所有键。
语法:
JSON_KEYS(json_doc, [path])
示例:
SELECT JSON_KEYS(‘{“name”: “John”, “age”: 30}’);
– 返回 [“name”, “age”]
13. JSON_TYPE()
返回 JSON 值的数据类型。
语法:
JSON_TYPE(json_doc)
示例:
SELECT JSON_TYPE(‘{“name”: “John”}’);
– 返回 OBJECT
14. JSON_UNQUOTE()
去除 JSON 值的引号,返回原始字符串。
语法:
JSON_UNQUOTE(json_val)
示例:
SELECT JSON_UNQUOTE(‘{“name”: “John”}->" . n a m e " ′ ) ; − − 返回 J o h n 15. J S O N A R R A Y A P P E N D ( ) 将新值附加到 J S O N 数组中。语法: J S O N A R R A Y A P P E N D ( j s o n d o c , p a t h , v a l u e ) 示例: S E L E C T J S O N A R R A Y A P P E N D ( ′ [ " a p p l e " , " b a n a n a " ] ′ , ′ .name"'); -- 返回 John 15. JSON_ARRAY_APPEND() 将新值附加到 JSON 数组中。 语法: JSON_ARRAY_APPEND(json_doc, path, value) 示例: SELECT JSON_ARRAY_APPEND('["apple", "banana"]', ' .name");返回John15.JSONARRAYAPPEND()将新值附加到JSON数组中。语法:JSONARRAYAPPEND(jsondoc,path,value)示例:SELECTJSONARRAYAPPEND(["apple","banana"],’, ‘orange’);
– 返回 [“apple”, “banana”, “orange”]
这些 JSON 函数使 MySQL 更加方便地处理复杂的 JSON 数据类型,适用于存储和操作灵活结构化的数据。

7. 加密和压缩函数

MD5(str): 返回字符串的 MD5 加密结果。
SHA1(str): 返回字符串的 SHA-1 加密结果。
COMPRESS(string): 压缩一个字符串。
UNCOMPRESS(string): 对压缩过的字符串进行解压缩。
这只是 MySQL 中众多函数的一小部分示例。具体使用时,可以根据 MySQL 的官方文档来选择适合的函数。MySQL 提供了许多内置函数,常用于处理字符串、日期、数学运算以及聚合操作等。以下是一些常用的 MySQL 函数:


http://www.kler.cn/a/310997.html

相关文章:

  • leetcode hot100【LeetCode 114.二叉树展开为链表】java实现
  • Linux kernel 堆溢出利用方法(二)
  • Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)
  • JavaScript高级程序设计基础(四)
  • spring中r类是什么
  • 【Rust练习】21.动态数组 Vector
  • 函数的定义与使用
  • 【Hot100】LeetCode—169. 多数元素
  • 常见汇编指令
  • C++系列-谓词predicate
  • AWTK fscript 中的 CRC函数
  • 转行大模型开发:挑战与机遇,如何有效学习以实现职业转变
  • 第二证券:移动物联网迎政策助力 稀土价格有望持续回暖
  • 【C++】 —— string的使用
  • [go] 适配器模式
  • 爬虫之隧道代理:如何在爬虫中使用代理IP?
  • [Leetcode] 227.基本计算器
  • Kleopatra与MinGW64中gpg冲突
  • [Linux] 通透讲解 什么是进程
  • 嵌入式常用算法之低通滤波算法
  • libgit2编译
  • 智慧课堂学生行为数据集
  • 2024最新版 Tuxera NTFS for Mac 2023绿色版图文安装教程
  • 达梦数据库导入xml迁移到达梦数据库大文件导致中断问题解决方案记录?
  • ESP8266+httpServer+GET+POST实现网页验证密码
  • 承兑汇票识别API 银行承兑汇票识别接口 电子承兑汇票识别sdk 多进程识别