简介
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): 重复执行表达式
exprcount次,返回 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 表示发生错误。