[MySQL初阶]MySQL(5)内置函数详解

标题:[MySQL初阶]MySQL(5)内置函数详解
@水墨不写bug

文章目录

  • 一、日期函数
    • [1. current_date()](#1. current_date())
    • [2. current_time()](#2. current_time())
    • [3. current_timestamp()](#3. current_timestamp())
    • [4. date(datetime)](#4. date(datetime))
    • [5. date_add(date, interval expr unit)](#5. date_add(date, interval expr unit))
    • [6. date_sub(date, interval expr unit)](#6. date_sub(date, interval expr unit))
    • [7. datediff(date1, date2)](#7. datediff(date1, date2))
    • [8. now()](#8. now())
    • 9.日期函数总结&&注意事项
  • 二、字符串函数
    • [1. charset(str)](#1. charset(str))
    • [2. concat(string1, string2 [, ...])](#2. concat(string1, string2 [, ...]))
    • [3. instr(string, substring)](#3. instr(string, substring))
    • [4. ucase(string)](#4. ucase(string))
    • [5. lcase(string)](#5. lcase(string))
    • [6. left(string, length)](#6. left(string, length))
    • [7. length(string)](#7. length(string))
    • [8. replace(str, search_str, replace_str)](#8. replace(str, search_str, replace_str))
    • [9. strcmp(string1, string2)](#9. strcmp(string1, string2))
    • [10. substring(str, position [, length])](#10. substring(str, position [, length]))
    • [11. ltrim(string)](#11. ltrim(string))
    • 12.字符串函数注意事项
  • 三、数学函数
    • [1. `ABS(number)`](#1. ABS(number))
    • [2. `BIN(decimal_number)`](#2. BIN(decimal_number))
    • [3. `HEX(decimalNumber)`](#3. HEX(decimalNumber))
    • [4. `CONV(number, from_base, to_base)`](#4. CONV(number, from_base, to_base))
    • [5. `CEILING(number)`](#5. CEILING(number))
    • [6. `FLOOR(number)`](#6. FLOOR(number))
    • [7. `FORMAT(number, decimal_places)`](#7. FORMAT(number, decimal_places))
    • [8. `RAND()`](#8. RAND())
    • [9. `MOD(number, denominator)`](#9. MOD(number, denominator))
    • 10.数学函数总结与注意事项

一、日期函数

接下来我将会按照表中罗列的函数来依次讲解MySQL内置函数。

1. current_date()

  • 描述:返回当前系统日期(不包含时间)。

  • 语法CURRENT_DATE()CURRENT_DATE

  • 返回值 :格式为 YYYY-MM-DD

  • 示例

    sql 复制代码
    SELECT current_date()或者current_date; -- 返回 '2025-03-05'

2. current_time()

  • 描述:返回当前系统时间(不包含日期)。

  • 语法CURRENT_TIME()CURRENT_TIME

  • 返回值 :格式为 HH:MM:SS

  • 示例

    sql 复制代码
    SELECT current_time(); -- 返回 '14:30:45'

3. current_timestamp()

  • 描述 :返回当前系统的日期和时间(即时间戳)。

  • 语法CURRENT_TIMESTAMP()CURRENT_TIMESTAMP

  • 返回值 :格式为 YYYY-MM-DD HH:MM:SS

  • 示例

    sql 复制代码
    SELECT current_timestamp(); -- 返回 '2025-03-05 14:30:50'

4. date(datetime)

  • 描述:从日期时间值中提取日期部分。

  • 参数datetime(日期时间类型的值)。

  • 返回值 :格式为 YYYY-MM-DD

  • 示例

    sql 复制代码
    SELECT date('2023-10-05 14:30:45'); -- 返回 '2023-10-05'

5. date_add(date, interval expr unit)

  • 描述 :在指定日期/时间上添加一个时间间隔。

  • 参数

    • date:原始日期或时间。
    • expr:数值(正数表示增加,负数表示减少)。
    • unit:时间单位(支持 YEARDAYMINUTESECOND 等)。
  • 返回值:新的日期/时间。

  • 示例

    sql 复制代码
    SELECT date_add('2025-10-05', interval 3 day); -- 返回 '2025-10-08'
    SELECT date_add('14:20:45', interval 10 minute); -- 返回 '14:30:45'

6. date_sub(date, interval expr unit)

  • 描述:在指定 日期/时间 上减去一个时间间隔。

  • 参数 :与 date_add 类似。

  • 返回值:新的日期/时间。

  • 示例

    sql 复制代码
    SELECT date_sub('2023-10-05', interval 1 year); -- 返回 '2022-10-05'
    SELECT date_sub('10:30:45', interval 30 second); -- 返回 '10:30:15'

7. datediff(date1, date2)

  • 描述 :计算两个日期之间的天数差(date1 - date2),前 - 后。

  • 参数 :两个日期值(格式需为 YYYY-MM-DD)。

  • 返回值 :整数(正数或负数);前 > 后 为正前 < 后为负

  • 示例

    sql 复制代码
    SELECT datediff('2023-10-10', '2023-10-05'); -- 返回 5
    SELECT datediff('2023-10-01', '2023-10-15'); -- 返回 -14

8. now()

  • 描述 :返回当前系统的日期和时间(与 current_timestamp() 功能相同)。

  • 语法NOW()

  • 返回值 :格式为 YYYY-MM-DD HH:MM:SS

  • 示例

    sql 复制代码
    SELECT now(); -- 返回 '2023-10-05 14:30:45'

9.日期函数总结&&注意事项

  1. 单位兼容性date_adddate_subunit 需与 date 类型匹配。例如,对日期使用 MINUTE 会返回 NULL
  2. 时间格式 :若参数格式错误(如非日期字符串),函数可能返回 NULL
  3. 函数别名
    • current_date() 等价于 curdate()
    • now() 等价于 current_timestamp()

二、字符串函数

接下来我会对上述表格函数一一详解:


1. charset(str)

  • 描述 :返回字符串 str 的字符集名称。

  • 参数str(字符串)。

  • 返回值 :字符集名称(如 utf8mb4latin1)。

  • 示例

    sql 复制代码
    SELECT charset('abc'); -- 返回当前连接的字符集,一般是 'utf8mb4'

2. concat(string1, string2 [, ...])

  • 描述:将多个字符串连接成一个字符串。

  • 参数:至少两个字符串,支持多个参数。

  • 返回值 :拼接后的字符串。若任一参数为 NULL,则返回 NULL

  • 示例

    sql 复制代码
    SELECT concat('My', 'SQL'); -- 返回 'MySQL'
    SELECT concat('Hello', NULL, 'World'); -- 返回 NULL

特殊注意concat(string1, string2 [, ...])若任一参数为 NULL,则返回 NULL


3. instr(string, substring)

  • 描述 :返回子字符串 substringstring首次出现的位置,如果没有出现过,则返回0

  • 参数

    • string:主字符串。
    • substring:要查找的子字符串。
  • 返回值 :位置索引(从 1 开始),未找到返回 0

  • 示例

    sql 复制代码
    SELECT instr('foobarbaz', 'bar'); -- 返回 4
    SELECT instr('apple', 'z'); -- 返回 0

4. ucase(string)

  • 描述:将字符串转换为大写。

  • 别名upper()

  • 示例

    sql 复制代码
    SELECT ucase('Hello'); -- 返回 'HELLO'

5. lcase(string)

  • 描述:将字符串转换为小写。

  • 别名lower()

  • 示例

    sql 复制代码
    SELECT lcase('HELLO'); -- 返回 'hello'

6. left(string, length)

  • 描述:从字符串左侧截取指定长度的字符。
  • 参数
  • string:原始字符串。
  • length:截取长度(若为负数返回空字符串)。
  • 示例
sql 复制代码
SELECT left('Hello World', 5); -- 返回 'Hello'
  • 类似的还有right(string,length),在这里不再赘述。

7. length(string)

  • 描述:返回字符串的字节长度(与字符集相关)。
  • 注意 :若需字符数,使用 char_length()
  • 示例
sql 复制代码
SELECT length('中国66'); -- 若字符集为 utf8mb4,返回 8(每个汉字占3字节,ASCII字符占一个字节)
SELECT char_length('中国66'); -- 返回 4(不论汉字,还是ASCII都算一个字符)
  • char_length()不论汉字,还是ASCII都算一个字符:

8. replace(str, search_str, replace_str)

  • 描述 :将 str 中所有 search_str 替换为 replace_str

  • 参数

    • str:原始字符串。
    • search_str:被替换的子字符串。
    • replace_str:替换后的字符串。
  • 示例

    sql 复制代码
    SELECT replace('banana', 'a', 'o'); -- 返回 'bonono'
    SELECT replace('banana',,'a','中国'); -- 见图片

9. strcmp(string1, string2)

  • 描述 :逐字符比较两个字符串的大小(基于字符的ASCII值);类似于C的<string.h>内的strcmp函数.

  • 返回值

    • 0:两字符串相等。
    • 1string1 > string2
    • -1string1 < string2
  • 示例

    sql 复制代码
    SELECT strcmp('apple', 'apple'); -- 返回 0
    SELECT strcmp('zoo', 'apple'); -- 返回 1

10. substring(str, position [, length])

  • 描述 :从 position 开始截取 str 的字符,可指定截取长度。

  • 参数

    • position:起始位置(从 1 开始,负数表示从末尾倒数)。
    • length:可选,截取长度。
  • 示例

    sql 复制代码
    SELECT substring('Hello World', 7); -- 返回 'World'
    SELECT substring('Hello', -3, 2); -- 返回 'lo'

11. ltrim(string)

  • 描述 :去除字符串的前导空格(仅左侧)。

  • 注意 :去除尾部空格使用 rtrim(),去除两端空格使用 trim(),这两个函数与本函数类似。

  • 示例

    sql 复制代码
    SELECT ltrim('   Hello'); -- 返回 'Hello'

12.字符串函数注意事项

  1. 字符集影响length() 返回字节长度,char_length() 返回字符数。
  2. NULL处理concat() 中若存在 NULL,结果直接为 NULL
  3. 函数别名
    • ucase() 等价于 upper()
    • lcase() 等价于 lower()
  4. 索引范围substring()position 支持负数,表示从右向左计数。

三、数学函数


1. ABS(number)

  • 描述:返回数字的绝对值。

  • 参数number(整数或浮点数)。

  • 返回值 :非负数,例如 ABS(-5) 返回 5ABS(-3.2) 返回 3.2

  • 示例

    sql 复制代码
    SELECT ABS(-10); -- 输出 10

2. BIN(decimal_number)

  • 描述:将十进制整数转换为二进制字符串(MySQL特有)。

  • 参数decimal_number(十进制整数)。

  • 返回值 :二进制字符串,例如 BIN(10) 返回 '1010'(无前缀)。

  • 注意:仅支持整数输入,若输入小数,则返回整数部分。仅支持正数,输入负数则返回其补码。

  • 示例

    sql 复制代码
    SELECT BIN(5); -- 输出 '101'

    示例 :仅支持整数输入,若输入小数,则返回整数部分。
    示例 :仅支持正数,输入负数则返回其补码。
    在计算机中,负数以补码形式存储。-1的补码是其绝对值(1)的二进制取反后加1。例如,对于8位整数:

    1的二进制:00000001

    取反后:11111110

    加1得到补码:11111111(即全1)。


3. HEX(decimalNumber)

  • 描述:将十进制整数或字符串转换为十六进制字符串。

  • 参数decimalNumber(整数或字符串)。

  • 返回值 :十六进制字符串,例如 HEX(255) 返回 'FF'HEX('abc') 返回 '616263'

  • 示例

    sql 复制代码
    SELECT HEX(16); -- 输出 '10'

4. CONV(number, from_base, to_base)

  • 描述:将数字从一种进制转换为另一种进制。

  • 参数

    • number:原始进制的数字(字符串形式,例如 'A' 表示十六进制的10)。
    • from_base:原始进制(2-36)。
    • to_base:目标进制(2-36)。
  • 返回值 :目标进制的字符串,例如 CONV('A', 16, 2) 返回 '1010'

  • 示例

    sql 复制代码
    SELECT CONV(10, 10, 2); -- 输出 '1010'

5. CEILING(number)

  • 描述:向上取整,返回不小于输入值的最小整数。

  • 参数number(整数或浮点数)。

  • 返回值 :整数,例如 CEILING(3.2) 返回 4CEILING(-2.3) 返回 -2

  • 别名CEIL()(MySQL中两者均可)。

  • 示例

    sql 复制代码
    SELECT CEILING(4.1); -- 输出 5

6. FLOOR(number)

  • 描述:向下取整,返回不大于输入值的最大整数。

  • 参数number(整数或浮点数)。

  • 返回值 :整数,例如 FLOOR(3.8) 返回 3FLOOR(-2.7) 返回 -3

  • 示例

    sql 复制代码
    SELECT FLOOR(5.9); -- 输出 5

7. FORMAT(number, decimal_places)

  • 描述:格式化数字,保留指定小数位数并添加千位分隔符。

  • 参数

    • number:浮点数。
    • decimal_places:保留的小数位数(整数)。
  • 返回值 :字符串,例如 FORMAT(1234.567, 2) 返回 '1,234.57'(四舍五入)。

  • 注意 :与 ROUND() 不同,FORMAT 主要用于显示格式化,结果类型为字符串。

  • 示例

    sql 复制代码
    SELECT FORMAT(123456.789, 1); -- 输出 '123,456.8'

8. RAND()

  • 描述 :生成 [0.0, 1.0) 范围内的随机浮点数。

  • 参数:无。

  • 返回值 :随机浮点数,例如 0.548813

  • 扩展用法 :结合 RAND(N) 可指定种子值(N 为整数),生成可重复的随机序列。

  • 示例

    sql 复制代码
    SELECT RAND(); -- 输出 0.123456(随机值)

9. MOD(number, denominator)

  • 描述:取模运算(求余数)。

  • 参数

    • number:被除数。
    • denominator:除数。
  • 返回值 :余数,例如 MOD(10, 3) 返回 1MOD(-7, 3) 返回 -1

  • 注意:MySQL中余数符号与被除数一致。

  • 示例

    sql 复制代码
    SELECT MOD(10, 3); -- 输出 1

10.数学函数总结与注意事项

  1. BIN()CONV()

    • BIN() 是 MySQL 特有函数,直接返回二进制字符串。
    • 若需其他进制转换,使用 CONV(number, from_base, to_base)
  2. FORMAT()

    • 主要用于格式化输出(添加千位分隔符),而非单纯保留小数位数。若需四舍五入,可结合 ROUND(number, decimal_places) 使用。
  3. HEX()

    • 支持整数和字符串输入,返回十六进制字符串。

完~
转载请注明出处

相关推荐
Blue.ztl38 分钟前
菜鸟之路day31一一MySQL之多表设计
android·数据库·mysql
爬树的小蚂蚁2 小时前
Linux 修改bond后网关不生效的问题
linux·运维·服务器
洁洁!3 小时前
从零开始在亚马逊云科技 EC2上部署DeepSeek R1大语言模型:完整实战指南
服务器·科技·语言模型
练习本4 小时前
Android系统架构模式分析
android·java·架构·系统架构
程序员拂雨5 小时前
MongoDB知识框架
数据库·mongodb
风行無痕6 小时前
Ubuntu Linux系统配置账号无密码sudo
linux·服务器·ubuntu
消失在人海中7 小时前
oracle 会话管理
数据库·oracle
爆农7 小时前
centos搭建dokcer和vulhub
linux·运维·centos
SZ1701102317 小时前
中继器的作用
服务器·网络·智能路由器
chenxy027 小时前
如何快速分享服务器上的文件
运维·服务器