mysql中函数简介

简介: MySQL 是一种广泛使用的开源关系型数据库,提供丰富的内置函数,涵盖文本、数值、日期时间及系统操作,助力高效数据处理与管理。

概述

MySQL 是一个开源的关系型数据库管理系统(RDBMS),广泛用于各种应用场景,从小型网站到大型企业系统。是我们最常用的一种关系型数据,为了方便使用,MySQL 提供了多种内置函数,用于执行各种数据操作和处理。以下是主要的功能类型及其简要说明:

  • 文本函数:用于处理和操作字符串数据。
  • 数值函数:用于对数值数据进行数学运算和处理。
  • 时间与日期函数:用于处理日期和时间数据。
  • 系统函数:提供有关数据库和服务器的信息。

MySQL中的文本处理函数

1. 字符串连接函数

  • CONCAT(string1, string2, ...)
  • 用途:将多个字符串连接成一个字符串。
  • 示例CONCAT(first_name, ' ', last_name) 将名和姓连接,中间加一个空格。
  • CONCAT_WS(separator, string1, string2, ...)
  • 用途:使用指定的分隔符将多个字符串连接起来。
  • 示例CONCAT_WS(',', 'John', 'Doe', 'New York') 结果为 John,Doe,New York

2. 字符串长度函数

  • CHAR_LENGTH(string) CHARACTER_LENGTH(string)
  • 用途:返回字符串中的字符数。
  • 注意:适用于多字节字符集(如中文)。
  • LENGTH(string)
  • 用途:返回字符串的字节长度。
  • 注意:对于多字节字符(如中文),一个字符可能占用多个字节。

3. 字符串查找函数

  • LOCATE(substring, string) POSITION(substring IN string)
  • 用途:返回子字符串在字符串中第一次出现的位置(从1开始)。如果未找到,返回0。
  • INSTR(string, substring)
  • 用途:类似于 LOCATE,但参数顺序相反,返回子字符串在字符串中第一次出现的位置。

4. 字符串截取函数

  • SUBSTRING(string, start, length) SUBSTR(string, start, length)
  • 用途:从字符串中提取子字符串。start 是起始位置,length 是要提取的长度。
  • 示例SUBSTRING('Hello World', 7, 5) 结果为 'World'
  • LEFT(string, length)
  • 用途:从字符串的左侧提取指定长度的子字符串。
  • RIGHT(string, length)
  • 用途:从字符串的右侧提取指定长度的子字符串。

5. 字符串修剪函数

  • TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] string)
  • 用途:移除字符串两端的指定字符。默认情况下,移除空格。
  • 示例TRIM(' Hello World ') 结果为 'Hello World'
  • LTRIM(string)
  • 用途:移除字符串左侧的空格。
  • RTRIM(string)
  • 用途:移除字符串右侧的空格。

6. 大小写转换函数

  • UPPER(string) UCASE(string)
  • 用途:将字符串中的所有字符转换为大写。
  • LOWER(string) LCASE(string)
  • 用途:将字符串中的所有字符转换为小写。

7. 字符串替换函数

  • REPLACE(string, from_str, to_str)
  • 用途:将字符串中所有出现的 from_str 替换为 to_str
  • INSERT(string, pos, length, new_string)
  • 用途:在字符串的指定位置插入一个新的子字符串,并替换掉指定长度的字符。

8. 字符串填充函数

  • LPAD(string, length, pad_string)
  • 用途:在字符串的左侧填充指定的字符,直到达到指定的总长度。
  • RPAD(string, length, pad_string)
  • 用途:在字符串的右侧填充指定的字符,直到达到指定的总长度。

9. 字符串比较函数

  • STRCMP(string1, string2)
  • 用途:比较两个字符串。如果 string1 小于 string2,返回 -1;如果相等,返回 0;如果 string1 大于 string2,返回 1。

10. 其他有用的函数

  • REVERSE(string)
  • 用途:反转字符串中的字符顺序。
  • SPACE(n)
  • 用途:返回一个由 n 个空格组成的字符串。
  • REPEAT(string, count)
  • 用途:将字符串重复指定的次数。

11. 正则表达式函数

  • REGEXP_LIKE(string, pattern)
  • 用途:检查字符串是否匹配正则表达式模式。
  • REGEXP_REPLACE(string, pattern, replacement)
  • 用途:将字符串中匹配正则表达式模式的部分替换为指定的替换字符串。

12. 字符串拆分与聚合

  • SUBSTRING_INDEX(string, delimiter, count)
  • 用途:根据指定的分隔符拆分字符串,并返回第 count 个部分。
  • GROUP_CONCAT(expression SEPARATOR separator)
  • 用途:将多个行的值连接成一个字符串,之间使用指定的分隔符。

MySQL中的数值函数

1. 基本算术运算函数

  • ABS(number): 返回数值的绝对值。
  • SIGN(number): 返回数值的符号。正数返回1,负数返回-1,零返回0。
  • MOD(numerator, denominator): 返回 numerator 除以 denominator 的余数。
  • DIV(numerator, denominator): 返回 numerator 除以 denominator 的整数商。

2. 数学函数

  • CEIL(number) 或 CEILING(number): 返回大于或等于指定数的最小整数(向上取整)。
  • FLOOR(number): 返回小于或等于指定数的最大整数(向下取整)。
  • ROUND(number, decimals): 将数值四舍五入到指定的小数位数。如果省略 decimals,则四舍五入到最接近的整数。
  • TRUNCATE(number, decimals): 将数值截断到指定的小数位数,不进行四舍五入。
  • POW(x, y) 或 POWER(x, y): 返回 x y 次幂。
  • SQRT(number): 返回数值的平方根。

3. 指数和对数函数

  • EXP(number): 返回 e(自然对数的底)的 number 次幂。
  • LOG(number): 返回数值的自然对数。
  • LOG10(number): 返回数值的以10为底的对数。

4. 三角函数

  • SIN(number): 返回数值的正弦值,角度以弧度表示。
  • COS(number): 返回数值的余弦值,角度以弧度表示。
  • TAN(number): 返回数值的正切值,角度以弧度表示。
  • ASIN(number): 返回数值的反正弦值,结果以弧度表示。
  • ACOS(number): 返回数值的反余弦值,结果以弧度表示。
  • ATAN(number): 返回数值的反正切值,结果以弧度表示。

5. 其他常用函数

  • PI(): 返回圆周率 π 的值。
  • RAND(): 返回一个介于 0 和 1 之间的随机浮点数。
  • RAND(seed): 返回一个基于种子值的随机浮点数。相同的种子值会产生相同的随机数。
  • LEAST(number1, number2, ...): 返回参数列表中的最小值。
  • GREATEST(number1, number2, ...): 返回参数列表中的最大值。

6. 进制转换函数

  • BIN(number): 返回数值的二进制表示。
  • HEX(number): 返回数值的十六进制表示。
  • OCT(number): 返回数值的八进制表示。

7. 数值聚合函数

  • COUNT(expression): 返回满足条件的行数。
  • SUM(expression): 返回指定列值的总和。
  • AVG(expression): 返回指定列值的平均值。
  • MIN(expression): 返回指定列的最小值。
  • MAX(expression): 返回指定列的最大值。

8. 随机数生成函数

  • RAND(): 生成一个随机浮点数,范围在 0 到 1 之间。
  • RAND(seed): 生成一个基于种子值的随机浮点数。

9. 其他函数

  • CRC32(expression): 计算循环冗余校验值。
  • DEGREES(number): 将弧度转换为度数。
  • RADIANS(number): 将度数转换为弧度。

MySQL中的日期与时间函数

1. 获取当前日期和时间

  • CURDATE() 或 CURRENT_DATE(): 返回当前日期(格式为 YYYY-MM-DD)。
  • CURTIME() 或 CURRENT_TIME(): 返回当前时间(格式为 HH:MM:SS)。
  • NOW() 或 SYSDATE(): 返回当前的日期和时间(格式为 YYYY-MM-DD HH:MM:SS)。
  • CURRENT_TIMESTAMP(): 返回当前的日期和时间(格式为 YYYY-MM-DD HH:MM:SS)。

2. 日期和时间提取函数

  • YEAR(date): 从日期中提取年份。
  • MONTH(date): 从日期中提取月份。
  • DAY(date): 从日期中提取天数。
  • HOUR(time): 从时间中提取小时数。
  • MINUTE(time): 从时间中提取分钟数。
  • SECOND(time): 从时间中提取秒数。
  • MONTHNAME(date): 返回月份的英文名称(例如,January)。
  • DAYNAME(date): 返回星期的英文名称(例如,Monday)。
  • DAYOFWEEK(date): 返回日期对应的星期几(1 = Sunday, 2 = Monday, ..., 7 = Saturday)。
  • DAYOFYEAR(date): 返回日期是一年中的第几天(范围1-366)。
  • QUARTER(date): 返回日期所在的季度(1-4)。

3. 日期和时间计算函数

  • DATE_ADD(date, INTERVAL expr unit): 对日期或日期时间进行加法运算。例如,DATE_ADD('2023-01-01', INTERVAL 1 MONTH) 返回 2023-02-01
  • DATE_SUB(date, INTERVAL expr unit): 对日期或日期时间进行减法运算。例如,DATE_SUB('2023-01-01', INTERVAL 1 DAY) 返回 2022-12-31
  • DATEDIFF(date1, date2): 返回两个日期之间的天数差。
  • TIMEDIFF(time1, time2): 返回两个时间之间的差值(格式为 HH:MM:SS)。
  • TIMESTAMPDIFF(unit, datetime1, datetime2): 返回两个日期时间之间的差值,差值的单位由 unit 指定(例如,SECOND, MINUTE, HOUR, DAY, MONTH, YEAR)。

4. 格式化日期和时间

  • DATE_FORMAT(date, format): 根据指定的格式字符串格式化日期。例如,DATE_FORMAT('2023-01-01', '%W, %M %D, %Y') 返回 Sunday, January 1st, 2023
  • TIME_FORMAT(time, format): 根据指定的格式字符串格式化时间。例如,TIME_FORMAT('12:34:56', '%H:%i:%s') 返回 12:34:56

5. 日期和时间转换函数

  • STR_TO_DATE(str, format): 将字符串转换为日期时间值,格式由 format 指定。例如,STR_TO_DATE('01,5,2013', '%d,%m,%Y') 返回 2013-05-01
  • UNIX_TIMESTAMP(date): 将日期时间转换为 Unix 时间戳(自1970年1月1日以来的秒数)。
  • FROM_UNIXTIME(unix_timestamp): 将 Unix 时间戳转换为日期时间值。

6. 其他日期和时间函数

  • LAST_DAY(date): 返回日期所在月份的最后一天。例如,LAST_DAY('2023-02-15') 返回 2023-02-28
  • MAKEDATE(year, day_of_year): 根据年份和一年中的第几天生成日期。例如,MAKEDATE(2023, 1) 返回 2023-01-01
  • MAKETIME(hour, minute, second): 根据小时、分钟和秒生成时间。例如,MAKETIME(12, 34, 56) 返回 12:34:56
  • PERIOD_ADD(period, months): 对年月周期进行加法运算。例如,PERIOD_ADD(202301, 3) 返回 202304
  • PERIOD_DIFF(period1, period2): 返回两个年月周期之间的月份差。例如,PERIOD_DIFF(202304, 202301) 返回 3

7. 日期和时间条件函数

  • DATE(date): 提取日期时间值中的日期部分。
  • TIME(datetime): 提取日期时间值中的时间部分。
  • UTC_DATE(): 返回当前的 UTC 日期。
  • UTC_TIME(): 返回当前的 UTC 时间。
  • UTC_TIMESTAMP(): 返回当前的 UTC 日期和时间。

MySQL中的系统函数

1. 获取数据库和服务器信息

  • VERSION(): 返回 MySQL 服务器的版本号。
  • CONNECTION_ID(): 返回当前连接的连接 ID(线程 ID)。
  • DATABASE() 或 SCHEMA(): 返回当前数据库的名称。
  • USER() 或 CURRENT_USER(): 返回当前 MySQL 用户名和主机名。
  • SYSTEM_USER(): 返回当前 MySQL 系统用户名。
  • SESSION_USER(): 返回当前会话的 MySQL 用户名。

2. 加密和压缩函数

  • MD5(str): 计算字符串 str 的 MD5 校验和,返回 32 位十六进制数字字符串。
  • SHA1(str): 计算字符串 str 的 SHA-1 校验和,返回 40 位十六进制数字字符串。
  • SHA2(str, hash_length): 计算字符串 str 的 SHA-2 系列哈希值,hash_length 可以是 224、256、384 或 512。
  • COMPRESS(string_to_compress): 压缩字符串并返回二进制结果。
  • UNCOMPRESS(compressed_string): 解压缩由 COMPRESS() 函数生成的压缩字符串。
  • ENCODE(str, pass_str): 使用密码字符串 pass_str 加密字符串 str,返回二进制字符串。
  • DECODE(crypt_str, pass_str): 使用密码字符串 pass_str 解密加密字符串 crypt_str,返回原始字符串。

3. 信息函数

  • LAST_INSERT_ID(): 返回最近一次插入操作中自动生成的 AUTO_INCREMENT 值。
  • ROW_COUNT(): 返回受上一条 SQL 语句影响的行数。
  • FOUND_ROWS(): 返回上一条 SELECT 语句在没有 LIMIT 子句的情况下返回的行数。
  • BENCHMARK(count, expr): 重复执行表达式 expr count 次,返回 0,用于测试表达式执行时间。
  • CHARSET(str): 返回字符串 str 的字符集。
  • COLLATION(str): 返回字符串 str 的排序规则。

4. 流程控制函数

  • IF(expr, v1, v2): 如果表达式 expr 为真,返回 v1,否则返回 v2
  • IFNULL(v1, v2): 如果 v1 不为 NULL,返回 v1,否则返回 v2
  • NULLIF(v1, v2): 如果 v1 等于 v2,返回 NULL,否则返回 v1
  • CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END: 根据 value 的值返回不同的结果。
  • CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END: 根据条件返回不同的结果。

5. 类型转换函数

  • CAST(expr AS type): 将表达式 expr 转换为指定的数据类型 type
  • CONVERT(expr, type) 或 CONVERT(expr USING charset): 将表达式 expr 转换为指定的数据类型 type 或字符集 charset

6. 其他系统函数

  • UUID(): 返回一个通用唯一标识符(UUID)。
  • UUID_SHORT(): 返回一个较小的唯一标识符。
  • GET_LOCK(str, timeout): 获取一个名为 str 的命名锁,超时时间为 timeout 秒,返回 1 表示成功,0 表示超时,NULL 表示发生错误。
  • RELEASE_LOCK(str): 释放名为 str 的命名锁,返回 1 表示成功,0 表示锁不是由当前会话创建,NULL 表示发生错误。
  • IS_FREE_LOCK(str): 检查名为 str 的锁是否被当前会话占用,返回 1 表示是,0 表示否,NULL 表示发生错误。
相关文章
|
12天前
|
安全 Java 程序员
《Optional:告别空指针的“优雅之道”与“使用陷阱”》
《Optional:告别空指针的“优雅之道”与“使用陷阱”》
167 114
|
存储 传感器 自动驾驶
几种常见的点云格式数据解析与在线预览
3D模型在线转换网站支持pcd、pts、xyz、las、laz、asc、ply等点云格式文件在线预览,同时支持将点云格式在线转换为ply、xyz等模型格式。
7114 1
|
15天前
|
机器学习/深度学习 人工智能 程序员
StackOverflow已经死亡了吗
StackOverflow曾是程序员的“圣地”,但AI崛起正改变这一格局。ChatGPT等工具以高效即时的优势分流用户,使其面临流量下滑与社区文化挑战。而新兴的大模型实验室Lab4AI则融合算力、实践与协作,构建AI时代下的开发者新生态。从问答到实践,开发者社区正在进化。
StackOverflow已经死亡了吗
|
2月前
|
JSON 缓存 算法
如何通过API获取1688商品类目数据:技术实现指南
1688开放平台提供alibaba.category.get接口,支持获取全量商品类目树。RESTful架构,返回JSON数据,含类目ID、名称、层级等信息。需注册账号、创建应用并授权。请求需签名认证,QPS限10次,建议缓存更新周期≥24小时。
271 2
|
1月前
|
SQL 关系型数据库 MySQL
MySQL慢sql的排查与优化
本文详解MySQL慢查询排查与优化,涵盖EXPLAIN执行计划分析、索引失效场景及10大优化方案,如避免全表扫描、合理使用索引、分页与排序优化等,助力提升数据库性能。
MySQL慢sql的排查与优化
|
1月前
|
JSON 监控 API
小红书API接口的应用场景介绍
小红书API基于RESTful架构,支持HTTP协议与JSON格式,采用OAuth 2.0认证,实现内容数据获取、自动化发布、用户认证集成及实时舆情监控。开发者可借助API进行热度分析、KOL识别、跨平台登录与品牌告警,提升运营效率与决策能力。(238字)
325 1
|
2月前
|
人工智能 数据可视化 开发者
抖音怎么发教学智能体的视频?阿里云百炼实战指南,智能体来了教你落地​
2025年,AI智能体教学成抖音新风口。本文详解如何借助阿里云百炼平台,从搭建教学智能体、生成合规视频到SEO优化,全流程打造高搜索量教学内容,助力开发者实现技术变现与品牌曝光,抢占AI传播先机。(238字)
|
2月前
|
JSON 安全 API
全网最全面介绍1688API接口指南
1688是阿里巴巴旗下B2B批发平台,其API支持商品搜索、订单管理、数据同步等功能。本文详解API核心概念、权限申请、调用步骤及Python示例,涵盖认证安全、常见问题与最佳实践,助您快速实现系统集成与业务自动化。(239字)
523 1
|
2月前
|
缓存 API Python
如何通过API获取拼多多商品详情数据?
注册开放平台账号,获取client_id与client_secret,调用鉴权接口换取access_token(有效期24小时)。通过GET请求查询商品详情,需传goods_id和access_token。响应包含商品名称、价格、销量及SKU库存等信息。注意处理code非0的错误,控制请求频率≤100次/分钟,建议指数退避重试。Python示例使用requests实现。
248 0