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

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

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

在这里插入图片描述

文章目录

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


一、日期函数

在这里插入图片描述接下来我将会按照表中罗列的函数来依次讲解MySQL内置函数。

1. current_date()

  • 描述:返回当前系统日期(不包含时间)。
  • 语法CURRENT_DATE()CURRENT_DATE
  • 返回值:格式为 YYYY-MM-DD
  • 示例
    SELECT current_date()或者current_date; -- 返回 '2025-03-05'
    

2. current_time()

  • 描述:返回当前系统时间(不包含日期)。
  • 语法CURRENT_TIME()CURRENT_TIME
  • 返回值:格式为 HH:MM:SS
  • 示例
    SELECT current_time(); -- 返回 '14:30:45'
    

3. current_timestamp()

  • 描述:返回当前系统的日期和时间(即时间戳)。
  • 语法CURRENT_TIMESTAMP()CURRENT_TIMESTAMP
  • 返回值:格式为 YYYY-MM-DD HH:MM:SS
  • 示例
    SELECT current_timestamp(); -- 返回 '2025-03-05 14:30:50'
    

4. date(datetime)

  • 描述:从日期时间值中提取日期部分。
  • 参数datetime(日期时间类型的值)。
  • 返回值:格式为 YYYY-MM-DD
  • 示例
    SELECT date('2023-10-05 14:30:45'); -- 返回 '2023-10-05'
    

5. date_add(date, interval expr unit)

  • 描述:在指定日期/时间上添加一个时间间隔。
  • 参数
    • date:原始日期或时间。
    • expr:数值(正数表示增加,负数表示减少)。
    • unit:时间单位(支持 YEARDAYMINUTESECOND 等)。
  • 返回值:新的日期/时间。
  • 示例
    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 类似。
  • 返回值:新的日期/时间。
  • 示例
    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)。
  • 返回值:整数(正数或负数);前 > 后 为正前 < 后为负
  • 示例
    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
  • 示例
    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)。
  • 示例
    SELECT charset('abc'); -- 返回当前连接的字符集,一般是 'utf8mb4'
    

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

  • 描述:将多个字符串连接成一个字符串。
  • 参数:至少两个字符串,支持多个参数。
  • 返回值:拼接后的字符串。若任一参数为 NULL,则返回 NULL
  • 示例
    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
  • 示例
    SELECT instr('foobarbaz', 'bar'); -- 返回 4
    SELECT instr('apple', 'z'); -- 返回 0
    

4. ucase(string)

  • 描述:将字符串转换为大写。
  • 别名upper()
  • 示例
    SELECT ucase('Hello'); -- 返回 'HELLO'
    

5. lcase(string)

  • 描述:将字符串转换为小写。
  • 别名lower()
  • 示例
    SELECT lcase('HELLO'); -- 返回 'hello'
    

6. left(string, length)

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

7. length(string)

  • 描述:返回字符串的字节长度(与字符集相关)。
  • 注意:若需字符数,使用 char_length()
  • 示例
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:替换后的字符串。
  • 示例
    SELECT replace('banana', 'a', 'o'); -- 返回 'bonono'
    SELECT replace('banana',,'a','中国'); -- 见图片
    

在这里插入图片描述


9. strcmp(string1, string2)

  • 描述:逐字符比较两个字符串的大小(基于字符的ASCII值);类似于C的<string.h>内的strcmp函数.
  • 返回值
    • 0:两字符串相等。
    • 1string1 > string2
    • -1string1 < string2
  • 示例
    SELECT strcmp('apple', 'apple'); -- 返回 0
    SELECT strcmp('zoo', 'apple'); -- 返回 1
    

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

  • 描述:从 position 开始截取 str 的字符,可指定截取长度。
  • 参数
    • position:起始位置(从 1 开始,负数表示从末尾倒数)。
    • length:可选,截取长度。
  • 示例
    SELECT substring('Hello World', 7); -- 返回 'World'
    SELECT substring('Hello', -3, 2); -- 返回 'lo'
    

11. ltrim(string)

  • 描述:去除字符串的前导空格(仅左侧)。
  • 注意:去除尾部空格使用 rtrim(),去除两端空格使用 trim(),这两个函数与本函数类似。
  • 示例
    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
  • 示例
    SELECT ABS(-10); -- 输出 10
    

2. BIN(decimal_number)

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

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

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

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

  • 示例

    SELECT BIN(5); -- 输出 '101'
    

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

    1的二进制:00000001

    取反后:11111110

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


3. HEX(decimalNumber)

  • 描述:将十进制整数或字符串转换为十六进制字符串。
  • 参数decimalNumber(整数或字符串)。
  • 返回值:十六进制字符串,例如 HEX(255) 返回 'FF'HEX('abc') 返回 '616263'
  • 示例
    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'
  • 示例
    SELECT CONV(10, 10, 2); -- 输出 '1010'
    

5. CEILING(number)

  • 描述:向上取整,返回不小于输入值的最小整数。
  • 参数number(整数或浮点数)。
  • 返回值:整数,例如 CEILING(3.2) 返回 4CEILING(-2.3) 返回 -2
  • 别名CEIL()(MySQL中两者均可)。
  • 示例
    SELECT CEILING(4.1); -- 输出 5
    

6. FLOOR(number)

  • 描述:向下取整,返回不大于输入值的最大整数。
  • 参数number(整数或浮点数)。
  • 返回值:整数,例如 FLOOR(3.8) 返回 3FLOOR(-2.7) 返回 -3
  • 示例
    SELECT FLOOR(5.9); -- 输出 5
    

7. FORMAT(number, decimal_places)

  • 描述:格式化数字,保留指定小数位数并添加千位分隔符。
  • 参数
    • number:浮点数。
    • decimal_places:保留的小数位数(整数)。
  • 返回值:字符串,例如 FORMAT(1234.567, 2) 返回 '1,234.57'(四舍五入)。
  • 注意:与 ROUND() 不同,FORMAT 主要用于显示格式化,结果类型为字符串。
  • 示例
    SELECT FORMAT(123456.789, 1); -- 输出 '123,456.8'
    

8. RAND()

  • 描述:生成 [0.0, 1.0) 范围内的随机浮点数。
  • 参数:无。
  • 返回值:随机浮点数,例如 0.548813
  • 扩展用法:结合 RAND(N) 可指定种子值(N 为整数),生成可重复的随机序列。
  • 示例
    SELECT RAND(); -- 输出 0.123456(随机值)
    

9. MOD(number, denominator)

  • 描述:取模运算(求余数)。
  • 参数
    • number:被除数。
    • denominator:除数。
  • 返回值:余数,例如 MOD(10, 3) 返回 1MOD(-7, 3) 返回 -1
  • 注意:MySQL中余数符号与被除数一致。
  • 示例
    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()

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

完~
转载请注明出处

在这里插入图片描述


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

相关文章:

  • React:Axios
  • C/C++获取结构体成员的偏移量
  • unsloth-llama3-8b.py 中文备注版
  • 使用 Arduino 的 WiFi 控制机器人
  • 二、双指针——6. 三数之和
  • Python函数定义详细教程:参数类型详解,报错UnboundLocalError怎么解决。
  • 贪心算法一
  • aws(学习笔记第三十一课) aws cdk深入学习(batch-arm64-instance-type)
  • Java多线程与高并发专题——为什么 Map 桶中超过 8 个才转为红黑树?
  • PPT 小黑第20套
  • java8中young gc的垃圾回收器选型,您了解嘛
  • AI面板识别 - 华为OD统一考试(java)
  • 风控模型算法面试题集结
  • 面试基础--Spring Boot启动流程及源码实现
  • IDEA 2024.1.7 Java EE 无框架配置servlet
  • osg官方例子
  • React基础之插值
  • 蓝桥杯 Excel地址
  • 深入剖析 Kubernetes 弹性伸缩:HPA 与 Metrics Server
  • FPGA-按键消抖