[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()

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

完~
转载请注明出处

相关推荐
叶羽西1 分钟前
Android15 Camera框架中的StatusTracker
android·camera框架
椰椰椰耶2 分钟前
【redis】全局命令set、get、keys
数据库·redis·缓存
梦中千秋5 分钟前
安卓设备root检测与隐藏手段
android
月落星还在10 分钟前
Redis 内存淘汰策略深度解析
数据库·redis·缓存
左灯右行的爱情14 分钟前
Redis- 切片集群
数据库·redis·缓存
LKAI.15 分钟前
MongoDB用户管理和复制组
linux·数据库·mongodb
linux修理工22 分钟前
moodle 开源的在线学习管理系统(LMS)部署
linux
buleideli33 分钟前
CameraX学习2-关于录像、慢动作录像
android·camerax
PinkandWhite40 分钟前
MySQL复习笔记
数据库·笔记·mysql
snpgroupcn1 小时前
ECC升级到S/4 HANA的功能差异 物料、采购、库存管理对比指南
运维·安全·数据库架构